我是opencv的新手,我遇到了这个问题...
给出以下Mat类型(全局声明) Mat src_gray; Mat dst;
我用这个初始化
dst=Mat::zeros(src_gray.size(), CV_BGR2GRAY);
似乎我无法编辑dst图像上的像素(当我使用imwrite时,它会给我一个黑色图像,好像我没有做任何事情)。 这是我目前的代码:
for(int i=0;i<=dst.cols;i++)
for(int j=0;j<=dst.rows;j++)
{
dst.at<uchar>(j,i)=255;
}
imwrite( "img_res.png", dst );
结果图像具有它应该具有的尺寸,但它是一张黑色的pixeled图片,不应该是一个白色的pixeled图像?
如果我提到我有3个全球性的垫子,我不知道它是否相关
Mat image;
Mat src_gray;
Mat dst;
以这种方式初始化:
image = imread( argv[1], 1 );
cvtColor( image, src_gray, CV_BGR2GRAY );
然后,我将它们发布为:
image.release();
dst.release();
src_gray.release();
我得到的另一个问题是,当我释放Mats(执行期间)时,我得到了#34; Segmentation fault(core dumped)&#34;错误。 (我从Linux Ubuntu distri编写代码)
答案 0 :(得分:1)
尝试:
dst=Mat::zeros(src_gray.size(), CV_8UC1);
当您使用CV_BGR2GRAY时,您正在创建具有3个颜色通道的Mat,然后,当您有一个数字数组(B,G,R)时,无法分配数字。 使用CV_8UC1,您可以创建一个带有1个颜色通道uchar的Mat,然后它应该与:
一起使用dst.at<uchar>(j,i)=255;