2013年4月22日 星期一

OpenCV - cvGet2D() and cvSet2D()

一般數學上我們都以(i, j)表示成 x = i, y = j
但OpenCV裡cvGet2D和cvSet2D的第一、二個參數(idx0, idx1)卻不是這個意思,
以數學方式來看的話是指(idx1, idx0),因為以程式設計中讀取一維陣列是
「有幾個row」乘上「img的寬度」加上「最後一列中的第幾個」

= idx0 * img->width + idx1
cvGet2D(source image, colume-th, row-th)

CODE:

for(int j=0; j<height; j++){
 for(int i=0; i<width; i++){
  CvScalar scalar_old = cvGet2D(img, j, i);
  // 抓出img(i, j)的 pixel值
                CvScalar scalar_new = cvScalarAll(scalar_old.val[0]);
  // 把img(i, j).b值 設成新的scalar的bgr值
                cvSet2D(img, j, i, scalar_new);
  // 把新的scalar丟回img
 }
}

沒有留言:

張貼留言