【问题标题】:crop rectangle with certain border color and cetain background color JAVA裁剪具有特定边框颜色和某些背景颜色的矩形 JAVA
【发布时间】:2013-01-11 08:00:21
【问题描述】:

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

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

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

有什么建议吗? 谢谢

【问题讨论】:

标签: java image opencv javacv


【解决方案1】:
  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))
    

    要检查背景颜色,计算它的直方图并检查 bin 的值是否只有 255 和 0(它们是白色和黑色的值)。

希望,这会很有用!

【讨论】:

    【解决方案2】:

    你可以试试这个:

    1. 找到一组彼此靠近的红色像素
    2. 查找与这些像素相关的所有红色像素,桶填充样式
    3. 计算找到的所有像素的边界框
    4. 也许检查红色像素是否都靠近边界框的边缘
    5. 检查盒子内部是否多为白色

    只要你的盒子没有被打断并且没有重叠,这应该可以工作。

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 2021-11-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2015-03-07
      相关资源
      最近更新 更多