Re: [問題] OpenCV 的 BMP RGB讀取的方法

看板C_and_CPP作者 (Simple Life)時間15年前 (2009/07/21 17:33), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《grayyoung (灰狼)》之銘言: : 想請問一下 有人知道怎麼讀取像素中的RGB嗎?? : 例如像這樣是讀取灰階值 : intensity = cvRound(cvGetReal2D(img, i, j); : 想問一下有沒有人知道讀取RGB是用什麼語法 假設有一張BGR彩圖為src 1) 我們可透過 CvSize size = CvGetSize( src ) 得到圖像的寬與高 寬: size.width 高: size.height 2) 此時出來的值為unsigned char 值域為-127~128 需要還原成int 值域0~255 所以需要下列這個方程式 int RCV(char color) { return (int)((unsigned char)color); } ------------------------------------- CvSize size = cvGetSize( src ); for(int y=0; y<size.height; y++){ for(int x=0; x<size.width; x++){ int index = y*size.width+x; int B=0, G=0, R=0; B = RCV( src->imageData[3*index+0] ); G = RCV( src->imageData[3*index+1] ); R = RCV( src->imageData[3*index+2] ); } } ------------------------------------- 若是要讀彩圖的灰階值,可以先用函式轉換 CvSize size = cvGetSize( src ); IplImage *gray = cvCreateImage( size, IPL_DEPTH_8U, 1); cvSetZero( gray ); cvCvtColor( src, gray, CV_BGR2GRAY); for(int y=0; y<size.height; y++){ for(int x=0; x<size.width; x++){ int index = y*size.width+x; int intensity=0; intensity = RCV( src->imageData[index] ); } } BGR圖轉灰階的公式,其BGR權重比例可依需求自己設計,沒一定的標準。 現在用的都是幾個常見的轉換比例。 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.123.81.29

07/21 17:33, , 1F
記得用完cvCrateImage 要cvReleaeImage
07/21 17:33, 1F

07/21 17:49, , 2F
unsigned char的值域就是0~255了, 為什麼要再轉一手?_?
07/21 17:49, 2F
文章代碼(AID): #1APOjOGp (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1APOjOGp (C_and_CPP)