作者deo2000 (800IM)
看板C_and_CPP
標題[問題] OpenCV 轉灰階卻無圖片
時間Mon Apr 9 20:17:17 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2010Pro x64
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenCV
問題(Question):
轉換目的地 Image2 有視窗卻無圖片
餵入的資料(Input):
jpg彩色圖片一張
預期的正確結果(Expected Output):
Image2的視窗應該有一張灰階圖片
錯誤結果(Wrong Output):
Image2的視窗一片灰
程式碼(Code):(請善用置底文網頁, 記得排版)
IplImage *Image1, *Image2, *ImageMask;
uchar B[450][600],G[450][600],R[450][600],Gary[450][600];
int main()
{
char FileName[10]="Yang.jpg";
Image1 = cvLoadImage(FileName,1);
CvSize Image2Size=cvSize(450,600);
Image2 = cvCreateImage(Image2Size,IPL_DEPTH_8U,3);
cvShowImage("Show Yang Image",Image1);
/*Load image RGB value*/
for(int y=0;y<Image1->height;y++){
for(int x=0;x<Image1->widthStep;x+=3){
B[x][(y/3)]=Image1->imageData[x*Image1->width];
G[x][(y/3)]=Image1->imageData[x*Image1->width+1];
R[x][(y/3)]=Image1->imageData[x*Image1->width+2];
}
}
/*Implment algorithms*/
for(int y=0;y<Image1->height;y++){
for(int x=0;x<Image1->width;x+=3){
Gary[x][y]=0.33*B[x][y]+0.33*G[x][y]+0.33*R[x][y];
B[x][y]=Gary[x][y];
G[x][y]=Gary[x][y];
R[x][y]=Gary[x][y];
}
}
/*Save Image*/
for(int y=0;y<Image1->height;y++){
for(int x=0;x<Image1->width;x+=3){
Image2->imageData[x*Image2->width]=B[x][(y/3)];
Image2->imageData[x*Image2->width+1]=G[x][(y/3)];
Image2->imageData[x*Image2->width+2]=R[x][(y/3)];
}
}
cvShowImage("Show Yang Gray Image",Image2);
cvWaitKey(0);
cvDestroyWindow("Show Image");
cvReleaseImage(&Image1);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.52.219
推 yehzu:在 access imag e的時候要用 widthStep 不是 width 喔 04/09 21:31
→ yehzu:然後 for 裡面是要用 width 不是用 widthStep 04/09 21:31
推 yuanyu90221:為何不直接用 cvScalar 一次接完B,G,R ? 04/10 01:56