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]) → 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 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 <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

opencv3 图像处理(一)图像缩放( python与c++ 实现)相关推荐

  1. Python图像处理丨图像缩放、旋转、翻转与图像平移

    摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...

  2. [Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  3. python函数图像平移_[Python图像处理]六.图像缩放,图像旋转,图像翻转与图像平移...

    图像缩放 图像缩放主要是调用resize()函数实现,result = cv2.resize(src, dsize[, result[.fx, fy[,interpolation]]])  其中src ...

  4. python图像处理(图像缩放)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 图像缩放也是isp处理的一个基本功能.现在的camera像素越来越大,但是显示设备的分辨率是一定 ...

  5. 数字图像处理(9): 图像缩放、图像旋转、图像翻转 和 图像平移

    目录 1 图像缩放- resize() 2 图像旋转- getRotationMatrix2D(), warpAffine() 3 图像翻转- flip() 4 图像平移- warpAffine() ...

  6. 数字图像处理:图像缩放和降低灰度级

    打开.显示.存储图片 用Python版OpenCV实现 image = cv2.imread("images/2_20_a.jpg", cv2.IMREAD_UNCHANGED) ...

  7. python图像处理第七课--图像缩放、翻转、旋转、平移--小白的成长历程

    #目的为记录在自己运行时存在的问题及解决方法,本文基于CSDN社区的Eastmount大佬的课程,通过学习,其中也增加了自己的考量和问题的解决. 图像缩放 图像缩放由 resize() 函数实现,如下 ...

  8. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

最新文章

  1. ML 04、模型评估与模型选择
  2. .net core ef mysql 的使用
  3. 如何使用 C# 中的 ValueTask
  4. 算法-排序-选择排序
  5. numpy 删除元素
  6. Nt/2000/xp平台下的存储控制模型(Access Control Model)
  7. 保送清华成博士,华为 12 年搞通信,他为何如此看待 5G ?| 人物志
  8. 详解 Linux 中 apt 命令的使用
  9. 201.数字范围按位与
  10. CentOS安装JDK 17
  11. 计算机组成原理慕课第六章答案,计算机组成原理单元答案2020MOOC
  12. 中国象棋,源码,开发,毕业设计,go,qt,c++,gin,游戏,残局,悔棋,人机,网络对战,双人
  13. maya 阿诺德水晶材质_Maya自带Arnold中的Ai Standard Surface材质如何渲染透明贴图?...
  14. 我奋斗十八年不是为了和你一起喝咖啡!
  15. Java游戏---俄罗斯方块
  16. 了解一下这几款实用的小众软件,相信你会有意想不到的收获
  17. python蒙特卡洛_Python:从零开始的汉密尔顿蒙特卡洛
  18. hⅰgh怎么读音发音英语_gh和ph的发音
  19. 2018ICPC焦作站赛后总结
  20. 水晶高跟鞋(测试版)

热门文章

  1. Autools学习总结(一)
  2. 破解出cmos密码(转载)
  3. 邮件发送类,支持HTML格式,支持优先级设置
  4. linux系统用户,组和权限的管理
  5. Python3中__init__.py文件介绍
  6. Docker容器中数据两种持久化存储方式:卷和挂载宿主目录
  7. 对象检测工具包mmdetection简介、安装及测试代码
  8. 【C++】google gflags详解
  9. 计算机应用基础试题及答案试卷号7074,阅读文章,完成试题。后来才知道,在这千钧一发的时刻,是郝副营长划着了火柴,点燃了那本书,举得高高的, - 学进去中小学试卷试题库...
  10. linux如何安装neo4j,Ubuntu16.04 如何安装neo4j数据库