
首先魔方要买那种磨砂的减少反光的影响。其实也就是当光线太亮或者太暗色彩分量就变小了。
然后通过方法找到魔方的边界,然后将这个正方形部分截取出来处理。
后面就是一个面一个面的处理,将分成33共9个块,就是对应着9个色块。
下面就是对每个块的处理,去除其中的非色彩分量,就是这部分不参与后面的计算。
我曾经用过一个方法,就是通过颜色的值来区分,因为魔方有六种颜色。别的颜色基本没什么问题,只有红色与橙色有问题,由于魔方生产的时候,色彩并不是标准的。所以是不能用固定阈值来处理,也不能用图像的模版来处理,因为那样模版要做的太多了。
个人觉得的办法是,整个魔方所有色块一起处理,先处理其他的颜色,最后再处理红色与橙色,可能会更精确些。就是越靠近红色分量的9个色块作为红色,越靠近橙色分量的9个色块作为橙色。
直接对每个像素点判断即可,src是图像
IplImage src;
CvScalar s;
for(int i = 0;i < src->height;i++)
{
for(int j = 0;j < src->width;j++)
{
s = cvGet2D(src,i,j); // 获得像素值
if(sval[0]<50&&sval[1]<50&&sval[2]>200)
//注意这里的012对应的是bgr,范围的意思是防止光线的明暗影响,可以适当放宽,另外你也可以选择其他的颜色空间,可以直接取消明暗影响,比如HSV
{
sval[0]=0;
sval[1]=0;
sval[2]=255;
} //如果满足条件就设置为红色
else
{
sval[0]=0;
sval[1]=0;
sval[2]=0;
} //如果不满足就设置为黑色
cvSet2D(src,i,j,s); //设置像素
}
}
cvNamedWindow( "image", 1 );
cvShowImage("image",src); //显示出来
另外你说的定位是什么意思,是不是说像车牌那样做一个矩形框框起来?我这做过一个车牌定位的,如果是的话我可以发给你!或者把代码贴出来
以上就是关于opencv摄像机捕捉魔方画面进行颜色识别的问题,如题。全部的内容,包括:opencv摄像机捕捉魔方画面进行颜色识别的问题,如题。、求用opencv识别红色区域 并定位的具体流程!!!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)