使用双比例的 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 年历史了,而且 已过时 。
我有以下问题。我以这种方式使用 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 年历史了,而且 已过时 。