设置彩色像素的Opencv最终会模糊相邻像素
我试图在OpenCV中设置CV_8UC3
类型图像的像素值。 我知道如何用单通道图像CV_8UC1
来做到这CV_8UC1
,但是当对三通道图像做同样的事情时,即使像素值没有改变,像素值也会模糊到相邻像素。
这是我如何使用单个通道图像来完成的:
Mat tmp(5, 5, CV_8UC1, Scalar(0));
uchar *tmp_p = tmp.ptr();
tmp_p[0] = (uchar)255;
imwrite("tmp.jpg", tmp);
由此产生的图像就像您期望的那样,只是第一个像素从黑色变为白色,而其他所有像素都保持独立。
以下是我期望通过三通道图像进行处理的方式:
Mat tmp(5, 5, CV_8UC3, Scalar(0));
uchar *tmp_p = tmp.ptr();
tmp_p[0] = (uchar)255;
imwrite("tmp.jpg", tmp);
该过程的预期结果应该在图像的左上角产生一个蓝色像素。 然而,相邻的3个像素似乎与我设置的像素值“模糊”。
如果有人知道为什么会出现这种像素模糊现象,我非常感谢能够获得的任何帮助。
事实证明,问题出现在图像文件格式中。 我正在输出图像作为修改像素的.jpg
。 将文件类型更改为.png
此问题已得到纠正。
这是我现在的代码,在输出到文件之前以及在输出的文件中重新读取之后,打印到原始图像的控制台。
// create a small black image and
// change the color of the first pixel to blue
Mat tmp(5, 5, CV_8UC3, Scalar(0));
uchar *tmp_p = tmp.ptr();
tmp_p[0] = (uchar)255;
// output values to the console
cout << tmp << endl << endl;
// write out image to a file then re-read back in
#define CORRECTMETHOD // comment out this line to see what was wrong before
#ifdef CORRECTMETHOD
imwrite("tmp.png", tmp);
tmp = imread("tmp.png");
#else
imwrite("tmp.jpg", tmp);
tmp = imread("tmp.jpg");
#endif
// print out values to console (these values
// should match the original image created above)
cout << tmp << endl;
链接地址: http://www.djcxy.com/p/15879.html
上一篇: Opencv setting a color pixel ends up blurring to neighboring pixels
下一篇: Opencv C++ Error, unable to obtain pixel intensity value for certain pixels