opencv中的缩放函数

  图像处理里面缩放操作是比较常见的:

  最近邻插值:类似简单映射的处理方式,目标图像w1,h1,原始图像w0,h0,则在目标图像上的点(x,y)的像素点实际对应原始图上(x*w0/w1,y*h0/h1)的像素点。优点是速度快,操作简单;缺点是图片会产生锯齿状。

  线性插值:对周围的点通过不同权值的乘积,使目标点的像素会受到周围像素的影响,过度更加自然些,即不会产生锯齿状。  对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)

  opencv中有四种处理方式:

  除了上面的两种,还有区域插值,三次样条插值

  opencv中的缩放函数

  测试代码如下:

  

opencv中的缩放函数
#include "stdafx.h"

#include "cv.h"

#include "highgui.h"



int main(){

    IplImage *img= cvLoadImage("C:/27.jpg");//读取源图片

    cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);

    cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);

    cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);

    cvNamedWindow("Example4",CV_WINDOW_AUTOSIZE);

    cvNamedWindow("Example5",CV_WINDOW_AUTOSIZE);



    cvShowImage("Example1",img);//在Example1显示图片



    IplImage *temp= cvLoadImage("C:/lv.jpg");//目标图片,放大成这个图片的大小





    cvResize(img,temp,CV_INTER_NN);

    cvShowImage("Example2",temp);



    cvResize(img,temp,CV_INTER_LINEAR);

    cvShowImage("Example3",temp);





    cvResize(img,temp,CV_INTER_AREA);

    cvShowImage("Example4",temp);



    cvResize(img,temp,CV_INTER_CUBIC);

    cvShowImage("Example5",temp);



    cvWaitKey(0);//暂停用于显示图片



    cvReleaseImage(&img);//释放img所指向的内存空间并且

    cvReleaseImage(&temp);//释放img所指向的内存空间并且

    cvDestroyWindow("Example1");

    cvDestroyWindow("Example2");

    cvDestroyWindow("Example3");

    cvDestroyWindow("Example4");

    cvDestroyWindow("Example5");



    return 0;

}
View Code

放大:  

 opencv中的缩放函数

缩小:

  opencv中的缩放函数

缩小的时候,区域插值效果不错!

 

参考:http://blog.sina.com.cn/s/blog_afe2af380101cadz.html ;学习opencv

你可能感兴趣的:(opencv)