使用 OpenCV 中的轮廓点从源图像创建图像?

Posted

技术标签:

【中文标题】使用 OpenCV 中的轮廓点从源图像创建图像?【英文标题】:Create an image from source image using Contour points in OpenCV? 【发布时间】:2014-03-06 20:17:34 【问题描述】:

我必须在图像中找到正方形,然后为检测到的正方形创建一个单独的图像。到目前为止,我能够检测到正方形并根据四个点得到它的轮廓。

问题:当我使用 ROI 创建图像时,我也得到了不存在正方形的背景。我想删除该区域并只想保留与正方形相关的区域。

【问题讨论】:

查看答案***.com/questions/22093174/… 【参考方案1】:

你想用面具!

创建黑白单通道图像(CV_U8C1)。白色部分是原始图像中所需的区域(您的感兴趣区域,ROI)。

向量“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 在两周前为我提供了我需要的所有信息,当时我遇到了同样的问题!

【讨论】:

Mat mask = Mat::zeros(480, 640, CV_8UC1); 应该与前 4 行相同,但我无法在 atm 测试它

以上是关于使用 OpenCV 中的轮廓点从源图像创建图像?的主要内容,如果未能解决你的问题,请参考以下文章

opencv cv.findContours 函数详解 图像轮廓层级 图像轮廓检索方式详解

python-opencv轮廓基本绘制

OpenCV 图像轮廓

OpenCV入门指南第七篇 线段检测与圆检测

如何使用 Python 用新图像替换图像中的轮廓(矩形)?

opencv:从图像创建二进制掩码