2014-03-06 54 views
1

我必须在图像中找到正方形,然后创建检测到的正方形的单独图像。到目前为止,我能够检测到正方形,并获得四点的轮廓。使用OpenCV中的轮廓点创建源图像中的图像?

问题:当我使用ROI创建图像时,我得到的背景也是广场不存在的地方。我想删除该区域,并只想保留与方块有关的区域。

+1

查看答案http://stackoverflow.com/questions/22093174/copying-non-rectangular-roi-opencv/22093257#22093257 – Haris

回答

2

你想使用一个面具!

创建黑白单通道图像(CV_U8C1)。白色部分是来自原始图像的所需区域(您感兴趣的区域,投资回报率)。

矢量“ROI_Vertices”包含ROI的顶点。在其周围安装一个多边形(ROI_Poly),然后用白色填充它。

之后使用CopyTo从图像中减去您的ROI。

// ROI by creating mask for your trapecoid 
// Create black image with the same size as the original  
Mat mask = cvCreateMat(480, 640, CV_8UC1); 
for(int i=0; i<mask.cols; i++) 
    for(int j=0; j<mask.rows; j++) 
     mask.at<uchar>(Point(i,j)) = 0; 

// Create Polygon from vertices 
vector<Point> ROI_Poly; 
approxPolyDP(ROI_Vertices, ROI_Poly, 1.0, true); 

// Fill polygon white 
fillConvexPoly(mask, &ROI_Poly[0], ROI_Poly.size(), 255, 8, 0);     

// Create new image for result storage 
Mat resImage = cvCreateMat(480, 640, CV_8UC3); 

// Cut out ROI and store it in resImage 
image->copyTo(resImage, mask);  

感谢this guy为我提供的所有信息我需要两个星期前,当我有同样的问题!

+0

'Mat mask = Mat :: zeros(480,640,CV_8UC1);' 应该做前4行相同的,但我不能测试它atm –