博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv3 图像处理(一)图像缩放( python与c++ 实现)
阅读量:6500 次
发布时间:2019-06-24

本文共 3516 字,大约阅读时间需要 11 分钟。

opencv3 图像处理 之 图像缩放( python与c++实现 )

一. 主要函数介绍

1) 图像大小变换 Resize ()

原型:

void Resize(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]) → retvalc++:    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
& params=vector
())

说明:

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 npimport cv2def 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 newimageimageOriginal = 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 
#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:"<
<<" * "<
<
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

转载地址:http://gqvyo.baihongyu.com/

你可能感兴趣的文章
学习C语言必须知道的理论知识(第一章)
查看>>
for语句内嵌例题与个人理解
查看>>
眠眠interview Question
查看>>
Linux C++/Java/Web/OC Socket网络编程
查看>>
[转]CSS hack大全&详解
查看>>
c语言第八次作业
查看>>
RPC-client异步收发核心细节?
查看>>
POJ-1753 Flip Game 枚举 状态压缩
查看>>
〖Linux〗使用Qt5.2.0开发Android的NDK应用程序
查看>>
idea快捷键
查看>>
Finalize/Dispose/Destructor
查看>>
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
<input type="hidden" />在IE中占空间(转)
查看>>
商品秒杀,防并发解决思路
查看>>
如何创建.gitignore文件,忽略git不必要提交的文件
查看>>
Github的Tom大鸟:我是如何拒绝微软30w的诱惑,专注于Github事业
查看>>
文件处理命令:sed
查看>>
Phpcms V9手机门户设置教程:怎么用PC V9做手机网站
查看>>
(转) SYSTEM_HANDLE_INFORMATION中ObjectTypeIndex的定义
查看>>
使用HTML5监測站点性能
查看>>