OpenCV屏蔽/分割功能

时间:2018-01-16 15:59:34

标签: c++ opencv

我有一个问题要问我们。我是OpenCV的新手,我需要了解该lib是否可以帮助我实现目标。

我需要使用OpenCV打开一个Tiff文件(大Tiff文件)并将其拆分为两个不同的文件,其掩码类似于Mask,最后文件1的像素为黑色而文件为2原始图像的负像素白色。

对我来说有什么想法或例子吗?

谢谢大家!

2 个答案:

答案 0 :(得分:0)

尝试此操作来创建遮罩:

cv::Mat tiff;
cv::Mat maskDark = tiff == 0; // comparison like '< 10' also works
cv::Mat maskDark = tiff == 255;

答案 1 :(得分:0)

要阅读文件,您可以使用imread功能。这将它存储在cv :: Mat对象中。由于你的面具是黑色和白色,我会使用IMREAD_GRAYSCALE将蒙版图像作为灰度读取。这为每个像素提供了0-255之间的值。这应该涵盖你问题的第一部分。

我不得不承认我无法理解你的问题,但我希望你能创建两个图像。第一个包含掩模具有黑色像素的所有像素。第二个包含图像,其中在掩模中所有像素都是白色。 你可以看看this thread。另外,我想告诉你我会这样做的方式。

你遇到的问题是你的.tiff-image与棋盘的类型不同。 Tiff可能是CV_8UC3,棋盘可能是CV_8UC1。但这应该很容易解决。 我想你可能想看一下每个像素,如果在棋盘的同一个像素上,你的颜色是白色的。然后,如果不是,请将原始像素中的像素设为黑色。我没有测试过这个,但它看起来像这样。

for (int i = 0; i < originalImage.rows; i++) {
for (int j = 0; j < originalImage.cols; j++) {
    if (chessboard.at<uchar>(Point(j, i)) != 255) {
        originalImage.at<Vec3b>(Point(j, i)) = Scalar(0, 0, 0);
    }
    else {
        // Do nothing.
    }
}

}

使用标量,因为originalImage有三个通道而不是一个通道。我希望这有帮助!