但用image->imagedata讀資料的話,超過255的值會被扣掉255,
例: 存300,就會變300-256= 44
另外如果用image->imagedata讀資料,做資料的加減乘除,建議轉成double做,而且要先轉unsigned,
例:
double temp1 = (double)(uchar)image->imagedata[j*widthStep+i+1];
double temp2 = (double)(uchar)image->imagedata[j*widthStep+i+2];
image->imagedata[j*widthStep+i] = (temp1+temp2)/2.0f;
因為image->imagadata為char,
假如image->imagedata[j*widthStep+i]的值為10000000(二進位)
那麼在十進位會看成-128,(double)image->imagedata[j*widthStep+i] = -128.0,
但其實在image裡值是0~255,所以他其實表示的值是+128,因此我們要先取unsigned,再取double。
另外若是兩個值相加完除2.0f不整除,用cvSet2D會四捨五入,直接用imagedata會無條件捨去,
例:
//(255+100)/2 = 177.5
cvSet2D(img, j, i, cvScalarAll((255+100)/2.0f));
// 上面這行的值會丟 178
image->imagedata[j*widthStep+i] = (255+100)/2.0f;
// 上面這行的值會丟 177
沒有留言:
張貼留言