首先,您需要以下信息来创建图像:
>宽度:301像素
>高度:260像素
>每个像素值(强度)为0~255:8位无符号整数
>支持所有RGB颜色:3个通道
>初始颜色:黑色=(B,G,R)=(0,0,0)
您可以使用cv :: Mat创建Image:
Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));
8U表示8位有符号整数,C3表示RGB颜色的3个通道,标量(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).
回到你的问题,
Why this happening since, both create a Mat image structure?
因为您需要指定Mat的类型.它是彩色图像CV_8UC3还是灰度图像CV_8UC1?它们是不同的.如果在CV_8UC3图像上使用标量(255),则您的程序可能无法正常工作.
What is the purpose of const cv:Scalar &_s ?
cv :: Scalar用于指定每个像素的强度值.例如,如果类型为CV_8UC3,则标量(255,0,0)为蓝色,标量(0,0,0)为黑色.或者标量(0)是黑色的,如果它是CV_8UC1灰度图像.避免将它们混合在一起