OpenCV 上的 resize 函数有什么问题?
What's wrong with resize's function on OpenCV?
这就是我今天想知道的:
我正在尝试通过以下代码将图像缩放为 4x4 像素:
Mat image4x4;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
resize(imageFromFile, image4x4, Size(4,4), INTER_CUBIC);
imwrite("/Users/macuser/Desktop/4x4/"+names.at(i), image4x4, compression_params);
我的结果是这样的:
但是使用任何其他工具,如 Photoshop、GIMP,结果是这样的:
使用 CUBIC
以及此软件。
我的实现有什么问题?我不是在考虑任何参数吗?
非常感谢。
示例:
更新:尝试使用在线缩放器,但我得到了同样的错误结果。
所以...也许我有兴趣了解 GIMP 的功能。
根据我在图像处理中学到的知识,调整大小是通过一些迭代来处理的,迭代是 2 的幂。其余的是插值。
所以我所做的是:将大小调整为最接近 2 的幂(因此,找到大小 < pow(2,N) 的第一个 N),然后按平方调整为大小 = 4。
例如,如果我的 N 是 10、2^10 = 512,我必须将大小调整为 256、128、64、32、16、8 和 4:
for (int i = 512; i>=4; i = i/2) {
resize(image4x4, image4x4, Size(i,i), 0, 0, INTER_CUBIC);
}
并且工作得很好 ;)
这就是我今天想知道的:
我正在尝试通过以下代码将图像缩放为 4x4 像素:
Mat image4x4;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
resize(imageFromFile, image4x4, Size(4,4), INTER_CUBIC);
imwrite("/Users/macuser/Desktop/4x4/"+names.at(i), image4x4, compression_params);
我的结果是这样的:
但是使用任何其他工具,如 Photoshop、GIMP,结果是这样的:
使用 CUBIC
以及此软件。
我的实现有什么问题?我不是在考虑任何参数吗?
非常感谢。
示例:
更新:尝试使用在线缩放器,但我得到了同样的错误结果。 所以...也许我有兴趣了解 GIMP 的功能。
根据我在图像处理中学到的知识,调整大小是通过一些迭代来处理的,迭代是 2 的幂。其余的是插值。
所以我所做的是:将大小调整为最接近 2 的幂(因此,找到大小 < pow(2,N) 的第一个 N),然后按平方调整为大小 = 4。
例如,如果我的 N 是 10、2^10 = 512,我必须将大小调整为 256、128、64、32、16、8 和 4:
for (int i = 512; i>=4; i = i/2) {
resize(image4x4, image4x4, Size(i,i), 0, 0, INTER_CUBIC);
}
并且工作得很好 ;)