OpenCV读取图像问题求助!

_ShuXin_ 2011-05-05 11:04:08
操作: 用opencv读取rgb图像,显示,将该rgb图像转成灰度图像。
程序如下:
#include "cv.h"
#include "highgui.h"
#include "iostream.h"
#include "stdlib.h"
int main()
{
IplImage *img,*image1 ,*grayImage;
uchar *ImageData;
int height,width,step,chanel;
int i=0,j=0;
int R,G,B;
img=cvLoadImage("yue1.jpg",1);
if(img==NULL)
{
cout<<"Image does not exits!"<<endl;
exit(1);
}
cvNamedWindow("OriginalImage",0);
cvResizeWindow("OriginalImage",400,300);
cvMoveWindow("OriginalImage",400,100);
cvShowImage("OriginalImage",img);
image1=cvCreateImage(cvSize(img->height,img->width),IPL_DEPTH_8U,3);
grayImage=cvCreateImage(cvSize(img->height,img->width),IPL_DEPTH_8U,1);
ImageData=(uchar *)img->imageData;

height=img->height;
width=img->width;
chanel=img->nChannels;
step=img->widthStep;
cout<<"step="<<step<<endl;
cout<<"width="<<width<<endl;
cout<<"height="<<height<<endl;
int tmp;
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
R=ImageData[i*step+j*chanel+0];
G=ImageData[i*step+j*chanel+1];
B=ImageData[i*step+j*chanel+2];
tmp=(R+G+B)/3;
((grayImage->imageData+grayImage->widthStep*i))[j]=tmp;
}
}
cvNamedWindow("gray",0);
cvResizeWindow("gray",400,300);
cvShowImage("gray",grayImage);
cvWaitKey(0);
cvDestroyWindow("OriginalImage");
cvDestroyWindow("gray");
return 0;
}
问题:源图像尺寸:800*600,但是转成灰度图像以后就不对了,灰度图像只有原图像的一部分,这里不能上传图像,没办法给出世纪的效果图。跟踪运行了一下看到图像的尺寸有问题,跟踪调试时图像的尺寸并非原来的800*600,但是经过程序的输出语句输出的尺寸却是800*600,真的很奇怪,不知道哪里有问题,请帮忙。谢谢。
...全文
243 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
_ShuXin_ 2011-05-05
  • 打赏
  • 举报
回复
嗯,是的,发现了,不细心导致的。谢谢了。!!!!
tuyang120428941 2011-05-05
  • 打赏
  • 举报
回复

#include "cv.h"
#include "highgui.h"
#include "iostream.h"
#include "stdlib.h"
int main()
{
IplImage *img,*image1 ,*grayImage;
uchar *ImageData;
int height,width,step,chanel;
int i=0,j=0;
int R,G,B;
img=cvLoadImage("lena.bmp",1);
if(img==NULL)
{
cout<<"Image does not exits!"<<endl;
exit(1);
}
cvNamedWindow("OriginalImage",CV_WINDOW_AUTOSIZE);
cvShowImage("OriginalImage",img);
image1=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,3);
grayImage=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1);
ImageData=(uchar *)img->imageData;

height=img->height;
width=img->width;
chanel=img->nChannels;
step=img->widthStep;
cout<<"step="<<step<<endl;
cout<<"width="<<width<<endl;
cout<<"height="<<height<<endl;
int tmp;
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
R=ImageData[i*step+j*chanel+0];
G=ImageData[i*step+j*chanel+1];
B=ImageData[i*step+j*chanel+2];
tmp=(R+G+B)/3;
((grayImage->imageData+grayImage->widthStep*i))[j]=tmp;
}
}
cvNamedWindow("gray",CV_WINDOW_AUTOSIZE);
cvShowImage("gray",grayImage);
cvWaitKey(0);
cvDestroyWindow("OriginalImage");
cvDestroyWindow("gray");
return 0;
}


LZ请注意这个地方cvSize中的宽和高的顺序和我们通常的理解正好是相反的,你改过来就可以啦!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧