裁剪矩形具有一定的边框颜色和cetain背景颜色JAVA

时间:2013-01-28 01:31:02

标签: java image opencv javacv

我有一个内部有一些矩形的图像..我需要的是只使用(Java)或JavaCV裁剪具有红色边框和白色背景的矩形。

例如,我有一个带车牌的汽车图像..车牌上的每个字母都有红色边框矩形和白色背景。

我正在寻找的是在单个图像中裁剪每个字母..字母由每个字母周围的红色边框矩形和白色背景标识。

有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

  1. 找到一组彼此靠近的红色像素
  2. 找到与这些相关的所有红色像素,斗式填充样式
  3. 计算找到的所有像素的边界框
  4. 也许检查红色像素是否都接近边界框的边缘
  5. 检查包装盒内部是否为白色
  6. 只要您的盒子没有中断且不重叠,这就应该有效。

答案 1 :(得分:0)

  1. 将色彩空间更改为HSV

     IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);
     cvCvtColor(img, imgHSV, CV_BGR2HSV);
    
  2. 仅获取色调频道:

    cvSplit( imgHSV, h_plane, s_plane, v_plane, 0 );
    
  3. 进行阈值处理以找到红色:

    cvInRangeS(h_plane, cvScalar(x, x, x), cvScalar(x, x, x), imgThreshed);
    

    x - HSV颜色模型中的红色范围。

    在此之后,您将拥有白色和黑色图像,其中原始图像上的白色为红色(如您所述,它们应为矩形)。

  4. 然后使用cvFindContours函数。

    int contoursCont = cvFindContours( imgThreshed, storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
    
  5. 要限制框(矩形)使用(对于每个轮廓):

    CvBox2D box = cvMinAreaRect2( @current_contour@,
                            CvMemStorage* storage CV_DEFAULT(NULL))
    

    要检查背景的颜色,请计算其直方图,并检查容器的值是否仅为255和0(它们是白色和黑色的值)。

  6. 希望,这将是有用的!