我考虑如果我以 BGRA 格式或 RGBA 格式传递给 IplImage *input
图像是否有任何问题,以便使用可用的插值调整其大小算法:
NTER_NEAREST - a nearest-neighbor interpolation
INTER_LINEAR - a bilinear interpolation (used by default)
INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.
INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood
INTER_LANCZOS4 - a Lanczos interpolation over 8x8 pixel neighborhood
调整大小后的图像将返回到 RGBA 缓冲区中。所以我认为转换 RGBA -> BGRA
和调整大小后 BGRA -> RGBA
的额外操作将是多余的,只会减慢我的图像大小调整。也许我错了,重要的是在使用上述插值时图像将采用正确的 BGRA 格式。
IplImage *image = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 4);
cvSetData(image, rgbaData, image->widthStep);
// resize image
float scale = 0.5;
IplImage *resizedImage = cvCreateImage(cvSize(image->width*scale, image->height*scale), image->depth, image->nChannels);
cvResize(image, resizedImage, CV_INTER_LANCZOS4);
总结我的问题是:
图像在 IplImage *
中采用 BGRA 数据格式有什么关系,而我想调整它的大小使用 cvResize()
和以上插值?
最佳答案
不,绝对没有区别。为了证明,你可以在这里查看:opencv code .代码有点难读,因为它使用了数学插值公式和 sse 内在函数的符号。
相同的权重用于插值 R、G、B、A。
关于c - OpenCV 图像大小调整和输入位图格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919365/