Lus*_*sy7 13 c++ opencv image-processing
我是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);
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如果我在第二个代码中使用标量(0)而不是标量(0,0,0),代码不起作用.为什么会发生这种情况,两者都会创建一个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)struct.
mcc*_*chu 21
首先,您需要以下信息来创建图像:
您可以使用cv::Mat以下方法创建图像:
Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));
Run Code Online (Sandbox Code Playgroud)
这8U意味着8位U有符号整数,C3意味着RGB颜色为3 C hannels,并且Scalar(0, 0, 0)是每个像素的初始值.同样的,
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);
Run Code Online (Sandbox Code Playgroud)
是画一条线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)为黑色CV_8UC3.或者Scalar(0)是黑色的,如果它是一个CV_8UC1灰度图像.避免将它们混合在一起
小智 8
您可以创建单通道图像或多通道图像.
创建单个频道图像: Mat img(500, 1000, CV_8UC1, Scalar(70));
创建多通道图像: Mat img1(500, 1000, CV_8UC3, Scalar(10, 100, 150));
您可以从以下页面中查看更多示例和详细信息. https://progtpoint.blogspot.com/2017/01/tutorial-3-create-image.html
| 归档时间: |
|
| 查看次数: |
51554 次 |
| 最近记录: |