• OpenCV


    转自:https://www.cnblogs.com/dyufei/p/8205121.html

    一. 主要函数介绍

    1) 图像大小变换 cvResize ()

    原型:

    voidcvResize(const CvArr* src,CvArr* dst,intinterpolation=CV_INTER_LINEAR
    );

    说明:

    src 表示输入图像。
    dst表示输出图像。
    intinterpolation插值方法,有以下四种:

    CV_INTER_NN - 最近邻插值,
    CV_INTER_LINEAR - 双线性插值 (缺省值)
    CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..
    CV_INTER_CUBIC - 立方插值.

    2)图像读取 imread()

    原型:

    python:
         cv2.imread(filename[, flags]) → retval
    c++:
        Mat imread(const string& filename, int flags=1 )

    说明:

    filename 表示图像的路径和名称(不在工作路径要提供绝对路径,否则读不到也不会报错)
    params 表示 的加载方式
    python:

    cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略, 这是默认参数。
    cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

    c++:

    CV_LOAD_IMAGE_COLOR 彩色
    CV_LOAD_IMAGE_GRAYSCALE 灰度

    3)图像创建 imwrite()

    原型:

    python:
     cv2.imwrite(filename, image[, params]) 
    c++:
        bool imwrite(const string& filename, InputArray image, const vector<int>& params=vector<int>())

    说明:

    filename 表示写图像的路径和名称(不在工作路径要提供绝对路径)
    image 是要保存的图像数据
    params 表示 图像保存方式python可以不用提供,但C++必须根据根式设置正确,否则保存不了图片。

    注意: C++ 中 imwrite(函数的) params参数 :

    参数与保存的图像类型相关,如果参数未指定文件保存不成功,具体根据保存的图像类型具体设置

    1)JPEG,参数为CV_IMWRITE_JPEG_QUALITY,它的值是从0到100,值越小压缩的越多,默认值是95.
    2)PNG,参数为CV_IMWRITE_PNG_COMPRESSION,它的值是从0到9,值越大表示图片尺寸越小,压缩时间越长。默认值是3。
    3)PPM,PGM或者PBM,参数为CV_IMWRITE_PXM_BINARY,它的值是0或者1。默认值是1。

    二、实例

    python版(python3.5 opencv3.4):

    import numpy as np
    import cv2
    
    def resizeImage(image,width=None,height=None,inter=cv2.INTER_AREA):
        newsize = (width,height)
        #获取图像尺寸
        (h,w) = image.shape[:2]
        if width is None and height is None:
            return image
        #高度算缩放比例
        if width is None:
            n = height/float(h)
            newsize = (int(n*w),height)
        else :
            n = width/float(w)
            newsize = (width,int(h*n))
    
            
        # 缩放图像
        newimage = cv2.resize(image, newsize, interpolation=inter)
        return newimage
    
    imageOriginal = cv2.imread("test.jpg")
    cv2.imshow("Original", imageOriginal)
    #获取图像尺寸
    w = width=imageOriginal.shape[1]
    h = width=imageOriginal.shape[2]
    print ("Image size:",w,h)
    #放大2倍
    newimage = resizeImage(imageOriginal,w*2,h*2,cv2.INTER_LINEAR)
    cv2.imshow("New", newimage)
    #保存缩放后的图像
    cv2.imwrite('newimage.jpg',newimage)
    #缩小5倍
    newimage2 = resizeImage(imageOriginal,int(w/5),int(h/5),cv2.INTER_LINEAR)
    cv2.imwrite('newimage2.jpg',newimage2)

    C++ 版(imageResize.cpp)

    #include <iostream>
    #include "opencv2/opencv.hpp"
    
    using namespace std;
    using namespace cv;
    
    void imageResize(Mat image, Mat* dst, int width, int height, int inter = CV_INTER_AREA )
    {
        
        int w = image.cols;
        int h = image.rows;
        int newW = width; 
        int newH = height;
        if(width == 0 && height ==0){
            return;
        }
        if(width == 0){
            float re = h/(float)height;
            newW = (int) w * re;
        } else {
            float re = w/(float)width;
            newH = (int) h * re;;
        }
        
        resize(image, *dst, Size(newW, newH),inter);
    
        
    }
    
    int main()  
    {  
        const char* filename = "test.jpg";
        Mat image,dst;
        //image = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
        image = imread(filename, CV_LOAD_IMAGE_COLOR);
        if (image.empty()) {
            std::cout<<"Faild open file.";
        }
        //imshow("image", image);
        //image.cols为图像的宽度 image.cols为图像的高度
        int w = image.cols;
        int h = image.rows;
        std::cout<<"Image size:"<<w <<" * "<<h<<std::endl;
        imageResize(image,&dst,w * 2, h * 2);
        
        std::cout<<"new Image size:"<<dst.cols <<" * "<<dst.rows<<std::endl;
        vector<int> compression_params;
        //JPEG,参数为CV_IMWRITE_JPEG_QUALITY,值是从0到100,值越小压缩的越多
        compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
        compression_params.push_back(100);
        //imshow("dstImage", dst);
        imwrite("dstImage.jpg",dst,compression_params);
    
        
        return 0;  
    }  

    编译:

     sudo g++ imageResize.cpp  -o resize  `pkg-config --cflags --libs opencv
  • 相关阅读:
    XML相关资源
    【翻译】Windows下文件的命名
    显示文件的16进制编码(C++)
    函数模板的匹配
    最新的flex4.1和as3.0的帮助文档
    Flash/Flex 框架简介—PureMVC
    textfield的诡异
    灵异的bug
    互联网公司的发展都在于专注和坚持。
    python内置数据类型
  • 原文地址:https://www.cnblogs.com/fx-blog/p/8244729.html
Copyright © 2020-2023  润新知