求用opencv把摄像头读取的图像转换成矩阵形式的代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求用opencv把摄像头读取的图像转换成矩阵形式的代码相关的知识,希望对你有一定的参考价值。

最好是从图像的读取到最后转换成矩阵形式的,谢谢

代码大概是这样的:
pCapture = cvCaptureFromCAM(-1);//从摄像头创建一个CvCapture对象
pFrame = cvQueryFrame( pCapture );//从PCapture中取得一帧
CvMat* pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC3);//定义一个指向CvMat对象的指针
cvConvert(pFrame, pFrameMat);//将PFrame转成CvMat。
如果你要取得pFrame的数据,可以直接用:pFrame->imageData,然后根据矩阵的形式来读写数据。追问

你好,我想输出矩阵的数据,要怎样写呢?谢谢

追答

uchar* data=(uchar*)pframe->imageData;
for(int i=0;iheight;i++)
for(int j=0;jwidth;j++)
for(int k=0;knchannels;k++)
printf("%d", data[i*img->widthStep+j*img->nchannels+k]);
通过上面的代码就可以讲矩阵里的数据打印出来。

参考技术A opencv里面有个函数cvConvert,假设你读取的图片是Image,矩阵为Mat,则用cvConvert(Image, Mat);可以实现将图片转换为矩阵形式,希望可以帮到您

如何用opencv提取一张图片的像素矩阵

操作单个像素方法:
at(int y, int x)
cv::mat的成员函数: at(int y, int x)可以用来存取图像中对应坐标为(x,y)的元素坐标。但是在使用它时要注意,在编译期必须要已知图像的数据类型,这是因为cv::mat可以存放任意数据类型的元素。因此at方法的实现是用模板函数来实现的。
使用方法:假设提前已知一幅图像img的数据类型为 unsigned char型灰度图(单通道),要对坐标为(10,12)的像素重新赋值为128,则对应操作如下
img.at<uchar>(12,10) = 128;
参考技术A 矩阵是像素的集合,通道是指每个像素用几种基色(不知道这样描述准不准确)组成,一般由RGB组成,有的带有a(alpha)。可以用cvSplit函数将3/4通道的图像的追问

然后呢?

参考技术B 从imageData中取,BGR顺序存的,每WidthStep换行本回答被提问者采纳 参考技术C 矩阵是像素的集合,通道是指每个像素用几种基色(不知道这样描述准不准确)组成,一般由RGB组成,有的带有a(alpha)。可以用cvSplit函数将3/4通道的图像的RGB(假设是RGB颜色空间)分离成只有R的图片、只有G的图片和只有B的图片!

以上是关于求用opencv把摄像头读取的图像转换成矩阵形式的代码的主要内容,如果未能解决你的问题,请参考以下文章

跪求用USB摄像头获取并保存图像的c或c++代码

opencv怎么将图像数据存入矩阵

opencv中为啥图像局矩阵是以BGR而不是RGB显示像素的大小?

opencv实现摄像头内外参数标定

如何用opencv提取一张图片的像素矩阵

OpenCV实现摄像机标定和像素转换,surf寻找特征点,FLANN匹配算子进行匹配