您的位置:首页 > 运维架构

在opencv中,如何将二维数组转化为一副图像进行显示?

2015-11-14 15:06 483 查看
最近学了些opencv,想把摄像头拍到的图像通过opencv显示出来,摄像头拍到的数据存到二维数组中,然后通过opencv显示,大概的程序如下:

        unsigned char graph[64][128];//摄像头拍到的数据

        IplImage* img = cvCreateImage( cvSize(64,128), 16, 1 ); //size为图像宽高,depth为位深度,channels为通道数

        img->imageData = (char*)graph; //IplImage里没有unsigned char型的指针,我只能(char*)graph,不知道有没有好的办法

        cvNamedWindow( "Image",0 );//创建窗口

        cvShowImage( "Image", img );//显示图像

程序出来的结果:

不知道为什么出来的图片会这样,刚学有很多还不会,路过的高手给点建议,感激不尽!!
分享到:  

QQ好友和群
 

QQ空间 

腾讯微博 

腾讯朋友


收藏

 回复

举报

  
zyechu





2#


  楼主| 发表于
2013-4-6 12:57:58 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

木有人回答的! 

  

 
 回复 支持 反对

举报

  
tomliao





3#


 发表于
2013-4-7 18:18:42 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

img->imageData = (char*)graph;

改成下面试试吧:

for(int y=0;y<height;y++)

for(int x=0;x<width;x++)

img->imageData[y*width+x]=graph[[y*width+x];

麻烦你顺便看一下我的帖子http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=25616

谢了, 

 
 回复 支持 反对

举报

  
tomliao





4#


 发表于
2013-4-7 18:20:43 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

对了 16改成 IPL_DEPTH_8U
 
 回复 支持 反对

举报

  
zyechu





5#


  楼主| 发表于
2013-4-8 23:44:00 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。
 
 回复 支持 反对

举报

  
tomliao





6#


 发表于
2013-4-9 16:33:12 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。

呵呵也不行
 
 回复 支持 反对

举报

  
tomliao





7#


 发表于
2013-4-9 16:50:18 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。

我知道你错哪了,你应该用一个函数cvConvert,使用例子如下

void Show(CvMat* mat)

{

CvSize size = cvSize(mat->width,mat->height);

IplImage* imgBuf = cvCreateImage(size,IPL_DEPTH_8U,1);

cvConvert(mat,imgBuf);

cvNamedWindow("mat",CV_WINDOW_AUTOSIZE);

cvShowImage("image",mat);

cvWaitKey(0);

cvReleaseImage(&imgBuf);

}

也就是说你先将数组的值赋给Cvmat,再将cvmat经cvconvert转换为IplImage,再显示应该就ok了。
 
 回复 支持 反对

举报

  
zyechu





8#


  楼主| 发表于
2013-4-9 22:55:14 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

[quote="zyechu":31hu1m46]我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。

我知道你错哪了,你应该用一个函数cvConvert,使用例子如下

void Show(CvMat* mat)

{

CvSize size = cvSize(mat->width,mat->height);

IplImage* imgBuf = cvCreateImage(size,IPL_DEPTH_8U,1);

cvConvert(mat,imgBuf);

cvNamedWindow("mat",CV_WINDOW_AUTOSIZE);

cvShowImage("image",mat);

cvWaitKey(0);

cvReleaseImage(&imgBuf);

}

也就是说你先将数组的值赋给Cvmat,再将cvmat经cvconvert转换为IplImage,再显示应该就ok了。[/quote:31hu1m46]

我之前就想过我CvMat,但没想到cvConvert()这个,按你说的改了,图像出来是反的,我用cvFlip(mat,mat,0);把它反过来了,效果还是不怎么样。还是有些黑边框出现,图片太小,不知道怎么放大?你的问题解决了吗?
 
 回复 支持 反对

举报

  
tomliao





9#


 发表于
2013-4-10 14:59:34 | 只看该作者

在opencv中,如何将二维数组转化为一副图像进行显示?

[quote="tomliao":rdohzj27][quote="zyechu":rdohzj27]我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。

我知道你错哪了,你应该用一个函数cvConvert,使用例子如下

void Show(CvMat* mat)

{

CvSize size = cvSize(mat->width,mat->height);

IplImage* imgBuf = cvCreateImage(size,IPL_DEPTH_8U,1);

cvConvert(mat,imgBuf);

cvNamedWindow("mat",CV_WINDOW_AUTOSIZE);

cvShowImage("image",mat);

cvWaitKey(0);

cvReleaseImage(&imgBuf);

}

也就是说你先将数组的值赋给Cvmat,再将cvmat经cvconvert转换为IplImage,再显示应该就ok了。[/quote:rdohzj27]

我之前就想过我CvMat,但没想到cvConvert()这个,按你说的改了,图像出来是反的,我用cvFlip(mat,mat,0);把它反过来了,效果还是不怎么样。还是有些黑边框出现,图片太小,不知道怎么放大?你的问题解决了吗?[/quote:rdohzj27]

解决了,问题出在对指针的理解不够深入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: