首页 文章

从cv :: Mat中的cv :: Point向量转换轮廓

提问于
浏览
1

假设我的目标是从初始图像中提取轮廓 . 我使用OpenCV执行此操作:

cv::Mat gray, edges;
cv::cvtColor(image, gray, CV_BGRA2GRAY);
cv::Canny(gray, edges, 100, 300, 3);

std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(edges, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE, cv::Point(0, 0));

现在轮廓包含在点数组中 . 我想重建一个与初始图像具有相同尺寸的cv :: Mat结构,以便通过将轮廓叠加到图像来强调轮廓 .

特别是,我对立即绘制轮廓不感兴趣 . 我将执行以下操作:

  • 提取轮廓

  • 扩大轮廓

  • 在图像上叠加轮廓(与边缘锐化一样)

因此,轮廓必须是与输入图像大小相同的矩阵 .

我怎样才能做到这一点?

提前致谢 .

1 回答

  • 1

    您可以重新构建Matrix

    Mat image_contours_grayscale = Mat::zeros(gray.size(),gray.type());
    Scalar color(255);
    drawContours( image_contours_grayscale, contours,-1,color,1);
    

    我不确定drawContours是否适用于灰度图像,但如果没有,你可以试试这个

    Mat image_contours_color = Mat::zeros(image.size(),image.type());
    Scalar color(255,255,255);
    drawContours( image_contours_color, contours,-1,color,1);
    Mat image_contours_grayscale;
    cv::cvtColor(image_contours_color, image_contours_grayscale, CV_BGRA2GRAY);
    

    image_contours_grayscale应为灰度图像,全黑,轮廓为白色 .

    让我知道如果这有效,我没有机会测试这个解决方案!

相关问题