Opencv - 蒙版图像导致黑色图像
Posted
技术标签:
【中文标题】Opencv - 蒙版图像导致黑色图像【英文标题】:Opencv - mask image results in black image 【发布时间】:2017-01-16 13:38:00 【问题描述】:我想屏蔽彩色图像,但得到的结果是全黑图像,我的代码是:
Mat maskOriginal(Mat src, Mat original, Mat mask)
original.copyTo(src, mask);
return src;
我的蒙版是单通道 (CV_8U) 黑白图像。 我的面具:
【问题讨论】:
请同时上传掩码? @Zdar - 已编辑。 你能说明你在哪里使用 maskOriginal 函数吗? @Sunreef - 我的程序只是调用这个函数,然后我打印返回的 img,我现在不知道源,但我会尽快发布。 这和java有什么关系?? 【参考方案1】:在应用蒙版时,您应该注意 src 和原始图像具有相同数量的通道,否则 copyTo 将无缝重新分配新的黑色图像。来自 opencv 文档:
该方法将矩阵数据复制到另一个矩阵。在复制数据之前,该方法调用
m.create(this->size(), this->type());
以便在需要时重新分配目标矩阵。
https://docs.opencv.org/2.4/modules/core/doc/basic_structures.html?highlight=clone#mat-copyTo
如果这两种类型不匹配,您可以使用例如cvtColor
方法来更改颜色,例如将 CV_8UC4 转换为 CV_8UC3,您可以执行以下操作:
cvtColor(original,original,COLOR_BGRA2BGR);
【讨论】:
【参考方案2】:注意,如何使用 maskOriginal 并注意掩码元素类型。 对于给定的图像,下面的代码将在输入图像的中间保留一个圆圈,同时用黑色填充其余部分。
cv::Mat img = cv::imread("image.png");
cv::Mat mask = cv::Mat::zeros(img.rows, img.cols, CV_8UC1);
cv::circle(mask, cv::Point(img.cols/2, img.rows/2),
std::min(img.rows, img.cols)/2, cv::Scalar(255), -1);
cv::Mat result;
result = maskOriginal(result, img, mask);
cv::namedWindow("result");
cv::imshow("result", result);
cv::waitKey();
【讨论】:
以上是关于Opencv - 蒙版图像导致黑色图像的主要内容,如果未能解决你的问题,请参考以下文章
opencv之python版图像的读取显示保存像素遍历以及结合matplotlib使用
将灰度图像中的像素转换为黑色(OpenCV)会导致意外结果?