我有一个图像,里面有一些矩形......我需要的是使用(Java)或JavaCV只裁剪具有红色边框和白色背景的矩形。
例如,我有一个带有车牌的汽车图像..车牌上的每个字母周围都有红色边框矩形和白色背景。
我正在寻找的是裁剪单个图像中的每个字母..字母由每个字母周围的红色边框矩形和白色背景标识。
有什么建议吗?谢谢
-
将色彩空间更改为 HSV
IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3); cvCvtColor(img, imgHSV, CV_BGR2HSV);
-
仅获取色调通道:
cvSplit( imgHSV, h_plane, s_plane, v_plane, 0 );
-
执行阈值以查找红色:
cvInRangeS(h_plane, cvScalar(x, x, x), cvScalar(x, x, x), imgThreshed);
x - HSV 颜色模型中的红色范围。
在此之后,您将拥有白色和黑色图像,其中白色是原始图像上的红色(正如您所说,它们应该是矩形)。
-
然后使用cvFindContours函数。
int contoursCont = cvFindContours( imgThreshed, storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
-
到绑定框(矩形)使用(对于每个轮廓):
CvBox2D box = cvMinAreaRect2( @current_contour@, CvMemStorage* storage CV_DEFAULT(NULL))
要检查背景的颜色,请计算其直方图并检查箱的值是否仅为 255 和 0(它们是白色和黑色的值)。
希望,这会很有用!
试试这个:
- 查找彼此靠近的一组红色像素
- 查找连接到这些的所有红色像素,桶填充样式
- 计算找到的所有像素的边界框
- 也许检查红色像素是否都靠近边界框的边缘
- 检查盒子内部是否大部分为白色
只要您的盒子没有中断并且不重叠,这应该有效。