上篇博客用实现了基于双线性插值算法的图像缩放,主要函数zoom中大量使用了指针。采用指针来读取图像像素,优点是执行速度快,缺点是代码不易阅读。本篇采用opencv库中自带的cvGet2D()和cvSet2D()函数来读写图像像素,虽然执行速度较慢,但代码阅读性强,简单明了。
下面是主要函数zoom的实现,其他部分参考我的上一篇博客。
void zoom(IplImage* src, IplImage* dst){ int srcWidth = src->width; int srcHeight = src->height; int dstWidth = dst->width; int dstHeight = dst->height; //源图像与目标图像的宽高比例,这里减1很重要,否则有时报错,有时不报错。这点困扰了我很久 const float tx = (srcWidth-1.0f)/(dstWidth-1.0f); const float ty = (srcHeight-1.0f)/(dstHeight-1.0f); CvPoint2D32f uv;//存储源图像的浮点坐标 CvPoint3D32f f1; CvPoint3D32f f2; for (int j=0; j