看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
diabloevagto:http://ideone.com/jP3d3 gray+threshhold 04/10 02:31