使用双比例的 OpenCV 调整图像大小

Resize image with OpenCV with double scale

我有以下问题。我以这种方式使用 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.5)时,它可以正常工作。否则(例如 1.59),它会给出几个白色对角线而不是图像的一半。我不懂为什么。所有图片均为灰度。


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

旧的 OpenCV 版本通常不会在内存中连续排列数据,而是在每一行的末尾使用一些填充。行的长度加上填充由 widthStep 给出。如果你使用 width 你不考虑(evantual)填充,结果你得到这个 diagonalization 效果。

所以你需要做:

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

您真的应该避免使用 OpenCV 1,因为它已经有 10 年历史了,而且 已过时