我是opencv的新手,正在尝试一些示例代码。
在一个代码中, Mat gr(row1,col1,CV_8UC1,scalar(0)); int x = gr.at<uchar> (row,col);
在另一个
Mat grHistrogram(301,260,CV_8UC1,Scalar(0,0,0));
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);
现在我的问题是,如果我在第二个代码中使用标量(0)而不是标量(0,0,0),则该代码不起作用。1.为什么会发生这种情况,因为两者都创建了Mat图像结构。2. const cv:Scalar&_s的目的是什么?
我从Opencv网站(opencv.pdf,opencv2refman.pdf)和Oreilly的Opencv书中搜索Documentaion。但是找不到解释的答案。
我认为我正在使用Mat(int _rows,int _cols,int _type,const cv:Scalar&_s)结构。
首先,您需要以下信息来创建图像:
您可以使用创建图像cv::Mat
:
Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));
该8U
装置中的8位ü符号整数,C3
是指图3C为RGB颜色hannels,并且Scalar(0, 0, 0)
是针对每个像素的初始值。相似地,
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);
是画一条线grHistogram
从点pt1
至点pt2
。线的颜色是白色(255、255、255),具有1个像素的厚度,8个连接的线和0位移。
有时您不需要RGB彩色图像,而需要简单的灰度图像。也就是说,使用一个通道而不是三个。可以将类型更改为,例如CV_8UC1
,您仅需要指定一个通道的强度Scalar(0)
。
回到你的问题,
为什么会发生这种情况,因为两者都创建了Mat图像结构?
因为您需要指定的类型Mat
。它是彩色图像CV_8UC3
还是灰度图像CV_8UC1
?他们是不同的。如果Scalar(255)
在CV_8UC3
图像上使用,则程序可能无法正常运行。
const cv:Scalar&_s的目的是什么?
cv::Scalar
用于指定每个像素的强度值。例如,Scalar(255, 0, 0)
是蓝色,Scalar(0, 0, 0)
如果type是,则为黑色CV_8UC3
。或者Scalar(0)
是黑色的,如果它是一个CV_8UC1
灰度图像。避免将它们混合在一起。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句