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

最近学了些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 );//显示图像
程序出来的结果:


不知道为什么出来的图片会这样,刚学有很多还不会,路过的高手给点建议,感激不尽!!
 
   
2#
  楼主 |  发表于 2013-4-6 12:57:58  |  只看该作者

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

木有人回答的!   
 
 
   
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
谢了, 
 
 
   
4#
  发表于 2013-4-7 18:20:43  |  只看该作者

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

对了 16改成 IPL_DEPTH_8U
 
 
   
5#
  楼主 |  发表于 2013-4-8 23:44:00  |  只看该作者

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

我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。
 
 
   
6#
  发表于 2013-4-9 16:33:12  |  只看该作者

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

我按你说的改了,效果一样,我的问题还没解决.你也可以Out->imageData = (char*)outimage;试试。
呵呵也不行
 
 
   
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(&quot;mat&quot;,CV_WINDOW_AUTOSIZE);
cvShowImage(&quot;image&quot;,mat);
cvWaitKey(0);
cvReleaseImage(&imgBuf);
}
也就是说你先将数组的值赋给Cvmat,再将cvmat经cvconvert转换为IplImage,再显示应该就ok了。
 
 
   
8#
  楼主 |  发表于 2013-4-9 22:55:14  |  只看该作者

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

[quote=&quot;zyechu&quot;: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(&quot;mat&quot;,CV_WINDOW_AUTOSIZE);
cvShowImage(&quot;image&quot;,mat);
cvWaitKey(0);
cvReleaseImage(&imgBuf);
}
也就是说你先将数组的值赋给Cvmat,再将cvmat经cvconvert转换为IplImage,再显示应该就ok了。[/quote:31hu1m46]


我之前就想过我CvMat,但没想到cvConvert()这个,按你说的改了,图像出来是反的,我用cvFlip(mat,mat,0);把它反过来了,效果还是不怎么样。还是有些黑边框出现,图片太小,不知道怎么放大?你的问题解决了吗?
 
 
   
9#
  发表于 2013-4-10 14:59:34  |  只看该作者

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

[quote=&quot;tomliao&quot;:rdohzj27][quote=&quot;zyechu&quot;: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(&quot;mat&quot;,CV_WINDOW_AUTOSIZE);
cvShowImage(&quot;image&quot;,mat);
cvWaitKey(0);
cvReleaseImage(&imgBuf);
}
也就是说你先将数组的值赋给Cvmat,再将cvmat经cvconvert转换为IplImage,再显示应该就ok了。[/quote:rdohzj27]


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值