Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建遮罩以选择黑色区域 我的图像周围有一个黑色区域,我想用OpenCV C++创建一个面具来选择这个黑色区域,这样我就可以在后面画它。如何在不影响图像本身的情况下做到这一点_C++_Opencv_Mask - Fatal编程技术网

创建遮罩以选择黑色区域 我的图像周围有一个黑色区域,我想用OpenCV C++创建一个面具来选择这个黑色区域,这样我就可以在后面画它。如何在不影响图像本身的情况下做到这一点

创建遮罩以选择黑色区域 我的图像周围有一个黑色区域,我想用OpenCV C++创建一个面具来选择这个黑色区域,这样我就可以在后面画它。如何在不影响图像本身的情况下做到这一点,c++,opencv,mask,C++,Opencv,Mask,我尝试将图像转换为灰度,然后使用阈值将其转换为二进制,但它会影响我的图像,因为结果包含图像内部的黑色像素 另一个问题:如果我想裁剪图像而不是绘制图像,我该如何做 提前感谢,我会这样解决问题: 使用阈值1对图像进行反向二值化(即,值为0的所有像素均设置为1,其他所有像素均设置为0) 使用cv::findContours查找白色段 删除不接触图像边框的分段 使用cv::drawContours将剩余的线段绘制到遮罩上 就运行时效率而言,可能有一个更有效的解决方案,但您应该能够很快地原型化我的解决方

我尝试将图像转换为灰度,然后使用阈值将其转换为二进制,但它会影响我的图像,因为结果包含图像内部的黑色像素

另一个问题:如果我想裁剪图像而不是绘制图像,我该如何做


提前感谢,

我会这样解决问题:

  • 使用阈值1对图像进行反向二值化(即,值为0的所有像素均设置为1,其他所有像素均设置为0)
  • 使用
    cv::findContours
    查找白色段
  • 删除不接触图像边框的分段
  • 使用
    cv::drawContours
    将剩余的线段绘制到遮罩上

  • 就运行时效率而言,可能有一个更有效的解决方案,但您应该能够很快地原型化我的解决方案。

    这个问题比您上一个关于该主题的问题好/清楚得多!感谢您的快速回复,我如何删除不接触图像边框的片段??对不起,我是这个领域的初学者。轮廓是一组点。如果轮廓接触图像边界,则至少有一个点位于边界上。轮廓点的坐标由
    findContours
    返回,根据边界检查每个点很容易:x==0 | | | y==0 | | x==width-1 | | y==height-1(这里可能需要加或减1,我不记得
    findContours
    如何处理图像边界。)