我遇到以下问题。我用 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/