求用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]);
通过上面的代码就可以讲矩阵里的数据打印出来。
如何用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把摄像头读取的图像转换成矩阵形式的代码的主要内容,如果未能解决你的问题,请参考以下文章