使用双刻度

时间:2016-11-30 10:50:51

标签: c opencv image-resizing

我有以下问题。我用这种方式用OpenCV 1调整图像大小:

cvResize(img1, img2); 

其中:

img2= cvCreateImage( cvSize(img1->width * ratioScale + 0.5, img1->height * ratioScale + 0.5), IPL_DEPTH_8U, 1 );

然后,我想用255填充半图像(只是为了测试):

for (int j = 0; j < img2->height; j++){ 
  for (int i = 0; i < img2->width/2; i++){ 
     img2->imageData[j*img2->width + i] = 255;
  }
}

ratioScale精度小数点后的1位数(例如1.5)时,它可以正常工作。否则(例如1.59),它会产生几个白色对角线,而不是图像的一半。我不懂为什么。所有图像均为灰度。

我必须使用OpenCV 1 ,因为这是公司的义务。

1 个答案:

答案 0 :(得分:3)

旧的OpenCV版本通常不会在内存中连续布局数据,但在每行末尾使用一些填充。行的长度加上填充由widthStep给出。如果您使用width,则不要考虑(逐渐)填充,因此您会获得对角化效果。

所以你需要这样做:

img2->imageData[j*img2->widthStep + i] = 255;

<子> 你真的应该避免使用OpenCV 1,因为它现在已经10年了,它已经过时了