【发布时间】:2016-05-13 17:54:13
【问题描述】:
我正在尝试使用 OpenCV 来隔离覆盖大量文本的半透明深色矩形区域。这些矩形区域在窗口中的大小和位置可能不同。有没有办法检测这些暗区?
也许在显示暗区覆盖之前应用一些差异操作并与帧进行比较会更容易?
【问题讨论】:
我正在尝试使用 OpenCV 来隔离覆盖大量文本的半透明深色矩形区域。这些矩形区域在窗口中的大小和位置可能不同。有没有办法检测这些暗区?
也许在显示暗区覆盖之前应用一些差异操作并与帧进行比较会更容易?
【问题讨论】:
这应该会为您提供基于两个图像的所有边界框。
#include <cv.h>
#include <highgui.h>
using namespace cv;
Mat im = imread("original.jpg");
Mat im2 = imread("darkened.jpg");
Mat diff_im = im - im2;
Mat diff_im_binary;
threshold(diff_im, diff_im_binary, 30, 255, THRESH_BINARY);
findContours(diff_im_binary, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Approximate contours to polygons + get bounding rects and circles
vector<vector<Point> > contours_poly( contours.size() );
vector<Rect> boundRect( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
for( int i = 0; i < contours.size(); i++ )
{
approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(contours_poly[i]) );
}
【讨论】: