c - 使用 OpenCV 双倍缩放图像大小

标签 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,因为这是公司的义务。

最佳答案

旧的 OpenCV 版本通常不会在内存中连续排列数据,而是在每行末尾使用一些填充。行的长度加上填充由 widthStep 给出。如果您使用宽度,则不会考虑(evantual)填充,因此您会得到这种对角化效果。

所以你需要这样做:

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

<子> 您确实应该避免使用 OpenCV 1,因为它已经有 10 年历史了,并且已经过时了

关于c - 使用 OpenCV 双倍缩放图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886415/

相关文章:

C++ Lambdas : function that returns a function that returns a function . ..?

c - 为什么在打印 "This is the child process!"后执行停止?

python - opencv 的段错误,在 Raspberry 上的 python 中

android - 错误:错误:找不到(3,10) 'opencv2/opencv.hpp'文件

cocoa - 在 Cocoa : How to open image, 中调整它的大小并用新名称保存

C 编程 - 使用多个 .h 文件进行编译

c - 在线程之间划分工作? (并行线程)

c - 如何从高架摄像机考虑建筑物轨迹中像素的旋转?

html - 使用 CSS 按比例调整图像大小(警告 : preset max-width/height)

html - 如何为 $img 设置最大高度但保持比例