• 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中有四种处理方式:

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

      

      测试代码如下:

      

    #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

    放大:  

     

    缩小:

      

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

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

  • 相关阅读:
    【例题 6-12 UVA
    【例题 6-11 UVA-297】Quadtrees
    【例题 6-10 UVA
    SpringMVC表单验证器
    Spring MVC常用注解
    什么是Spring Boot?
    什么是Kotlin?Java的替代语言?
    阿里Druid连接池的坑。。
    常见的3种Class级别的错误
    阿里巴巴,排行前10的开源项目
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3534711.html
Copyright © 2020-2023  润新知