[問題] OpenCV處理RGB取mean值的問題

看板C_and_CPP作者 (陽光)時間14年前 (2011/12/05 20:44), 編輯推噓1(1015)
留言16則, 3人參與, 最新討論串1/1
小弟最近剛開始使用OpenCV做影像處理 有些問題想要請教 這個程式主要目的在於讀出一連串圖片的RGB值 接著對於G-channel取mean值 其中讀取RGB值及取mean的部分程式如下: IplImage* RChannel = cvCreateImage(cvGetSize(inputImage),IPL_DEPTH_8U,1); IplImage* GChannel = cvCreateImage(cvGetSize(inputImage),IPL_DEPTH_8U,1); IplImage* BChannel = cvCreateImage(cvGetSize(inputImage),IPL_DEPTH_8U,1); cvSplit(inputImage,BChannel,GChannel,RChannel,0); //以上為取RGB部分 double greenSum = 0.0; for(int i = 0 ; i < GChannel->height ; i++) { for(int j = 0 ; j < GChannel->width ; j++) { greenSum += (double)cvGetReal2D(GChannel,i,j); } } greenSum /= ((GChannel->height)*(GChannel->width)); //以上為加總並除以圖片size cout << greenSum << endl; 取RGB的部分參考過板上的文章以及GOOGLE的幫忙 應該是沒問題 但是在取mean值時遇到一點小小的問題 因為程式輸出的結果跟MATLAB的結果差異有點大 可能是取mean的過程有錯 想問問看小弟的方法有錯嗎? 主要想法是將此張圖片的G-Channel加總再除以圖片SIZE 麻煩高手幫忙解答 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.148.167

12/05 23:01, , 1F
RGB值型別不是Double
12/05 23:01, 1F

12/05 23:05, , 2F
型別是uchar,你可以轉形成uint
12/05 23:05, 2F

12/05 23:27, , 3F
我之前寫的程式給你參考
12/05 23:27, 3F

12/05 23:27, , 4F

12/05 23:27, , 5F
直接看Mat gray::process_image(Mat &image)就好
12/05 23:27, 5F

12/05 23:35, , 6F
所以是在計算mean時data type用錯了嗎?
12/05 23:35, 6F

12/05 23:47, , 7F
你有沒有先試過能正確取出G的數值呢?
12/05 23:47, 7F

12/05 23:57, , 8F
有確認過可以把圖片分成RGB,但取值加總方面不是很懂
12/05 23:57, 8F

12/05 23:57, , 9F
想說只針對G-channel的話應該是一個二維陣列
12/05 23:57, 9F

12/05 23:58, , 10F
其中數字都是0-255,所以想說用double來做加總
12/05 23:58, 10F

12/05 23:59, , 11F
再除以圖片大小,應該就是這張圖片G-channel的mean值
12/05 23:59, 11F

12/05 23:59, , 12F
只是結果根MATLAB不符
12/05 23:59, 12F

12/06 00:05, , 13F
感謝大家熱心幫忙,明天再去實驗室試試看,謝謝:)
12/06 00:05, 13F

12/06 00:12, , 14F
ipl不太清楚,我都是用mat
12/06 00:12, 14F

12/06 00:14, , 15F
pixel都是一個array沒錯,但是是用BGR的順序
12/06 00:14, 15F

12/06 00:14, , 16F
建議先正確讀到數值在開始做運算
12/06 00:14, 16F
文章代碼(AID): #1EtBoVty (C_and_CPP)