我正在做一个简单的阅读并显示PNG图像。我正在阅读背景为透明的png图像。我正在以灰度转换图像然后显示它。但转换后的图像看起来像这样:
原始图片:
灰度图片
这是代码。我做错了什么?:
Mat image = imread("3X3_a11.png",IMREAD_GRAYSCALE);
Mat output(image.size(),image.type());
// connectedComponents(image, output);
imshow("Output", image);
waitKey(0);
destroyAllWindows();
答案 0 :(得分:2)
您的RGBA图像格式不正确,或者至少非常奇怪。加载时我看到警告:
libpng warning: iCCP: known incorrect sRGB profile
然而,您可以通过以下简单处理获得cv::connectedComponents
的二进制版本需求:
#include <opencv2\opencv.hpp>
int main()
{
cv::Mat4b img4b = cv::imread("path_to_image", cv::IMREAD_UNCHANGED);
// Convert to grayscale getting rid of alpha channel
cv::Mat1b img(img4b.rows, img4b.cols, uchar(0));
for (int r = 0; r < img4b.rows; ++r) {
for (int c = 0; c < img4b.cols; ++c) {
if (img4b(r, c) == cv::Vec4b(255,255,255,255)) {
img(r, c) = uchar(255);
}
if (img4b(r, c)[3] == 0) {
img(r, c) = uchar(255);
}
}
}
cv::imshow("img", img);
cv::waitKey();
}
结果: