Opencv使用cv::Mat创建新图像
Opencv create new image using cv::Mat
我是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.constcv:Scalar&_s.
我从Opencv网站(Opencv.pdf,opencv2refman.pdf)和Oreilly的Opencv书中搜索文档。但找不到一个解释性的答案。
我想我使用的是Mat(int _rows,int _cols,int _type,const cv:Scalar&_s)结构。
首先,您需要以下信息来创建图像:
- 宽度:301像素
- 高度:260像素
- 每个像素值(强度)为0~255:一个8位无符号整数
- 支持所有RGB颜色:3个通道
- 初始颜色:黑色=(B,G,R)=(0,0,0)
您可以使用cv::Mat
:创建图像
Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));
8U
表示8位U有符号整数,C3
表示RGB颜色的3个C通道,Scalar(0, 0, 0)
是每个像素的初始值。类似地,
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);
是在CCD_ 6上从点CCD_ 7到点CCD_。线的颜色为白色(255255255),具有1像素厚度、8连接线和0偏移。
有时您不需要RGB彩色图像,而是需要一个简单的灰度图像。也就是说,使用一个通道而不是三个。类型可以更改为CV_8UC1
,并且只需要指定一个通道的强度,例如Scalar(0)
。
回到你的问题,
为什么会发生这种情况,因为两者都创建了Mat图像结构?
因为您需要指定Mat
的类型。是彩色图像CV_8UC3
还是灰度图像CV_8UC1
?它们是不同的。如果在CV_8UC3
映像上使用Scalar(255)
,则程序可能无法正常工作。
constcv:Scalar&_s
CCD_ 16用于指定每个像素的强度值。例如,如果类型为CV_8UC3
,则Scalar(255, 0, 0)
为蓝色,而Scalar(0, 0, 0)
为黑色。或者,如果是CV_8UC1
灰度图像,则Scalar(0)
为黑色。避免将它们混合在一起。
您可以创建单通道图像或多通道图像。
创建单通道图像: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
- 平均图像时图像损坏
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 如何快速创建一组覆盖两个图像的图像
- 如何使用OpenCV从已知的3D点云(在没有I的情况下构建)估计新图像I的相机姿态矩阵
- cvLoadImage 不显示新图像并加载以前的图像
- sfml pollevent,每个新图像都会删除上一个图像
- 如何在QGrapicsScene中用新图像替换以前的图像
- 打印像素值,但图像重叠.图像是其应有大小的三倍
- 图像和图像处理中的特征提取
- Opencv使用cv::Mat创建新图像
- 用cuda处理图像,图像不变
- 访问像素值,而不在内存中加载大图像的图像
- 自由图像报告图像颜色类型错误
- 如果新图像中的原始像素为黑色,则Qt绘制一个蓝色像素
- 如何使用CImg显示少量图像(每个图像在单独的窗口中)
- 是否可以使用c++ /OpenFrameworks将图像(或图像序列)作为硬件设备(网络摄像头)传递给Mac OSX ?
- 从图像中获取CMYK值,更改它们,并保存为新图像
- 视频AR无人机的随机帧为空,然后无法使用OpenCV获取新图像
- 将示例图像与图像数据库进行比较时出现意外结果 - Opencv c++
- 读取/写入 PPM 图像C++,新图像损坏