创建遮罩以选择黑色区域 我的图像周围有一个黑色区域,我想用OpenCV C++创建一个面具来选择这个黑色区域,这样我就可以在后面画它。如何在不影响图像本身的情况下做到这一点
我尝试将图像转换为灰度,然后使用阈值将其转换为二进制,但它会影响我的图像,因为结果包含图像内部的黑色像素 另一个问题:如果我想裁剪图像而不是绘制图像,我该如何做创建遮罩以选择黑色区域 我的图像周围有一个黑色区域,我想用OpenCV C++创建一个面具来选择这个黑色区域,这样我就可以在后面画它。如何在不影响图像本身的情况下做到这一点,c++,opencv,mask,C++,Opencv,Mask,我尝试将图像转换为灰度,然后使用阈值将其转换为二进制,但它会影响我的图像,因为结果包含图像内部的黑色像素 另一个问题:如果我想裁剪图像而不是绘制图像,我该如何做 提前感谢,我会这样解决问题: 使用阈值1对图像进行反向二值化(即,值为0的所有像素均设置为1,其他所有像素均设置为0) 使用cv::findContours查找白色段 删除不接触图像边框的分段 使用cv::drawContours将剩余的线段绘制到遮罩上 就运行时效率而言,可能有一个更有效的解决方案,但您应该能够很快地原型化我的解决方
提前感谢,我会这样解决问题:
cv::findContours
查找白色段cv::drawContours
将剩余的线段绘制到遮罩上就运行时效率而言,可能有一个更有效的解决方案,但您应该能够很快地原型化我的解决方案。这个问题比您上一个关于该主题的问题好/清楚得多!感谢您的快速回复,我如何删除不接触图像边框的片段??对不起,我是这个领域的初学者。轮廓是一组点。如果轮廓接触图像边界,则至少有一个点位于边界上。轮廓点的坐标由
findContours
返回,根据边界检查每个点很容易:x==0 | | | y==0 | | x==width-1 | | y==height-1(这里可能需要加或减1,我不记得findContours
如何处理图像边界。)