当前位置: 首页 > 编程日记 > 正文

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

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

相关文章:

web前端培训要学多久

​ 近几年web前端在互联网行业的快速发展&#xff0c;很多人都对web前端是非常感兴趣的&#xff0c;学习web前端技术的人越来越多&#xff0c;那么参加web前端培训要学多久呢?相信大家都想知道这个答案&#xff0c;我们来看看下面的详细介绍。 web前端培训要学多久?首先对于前…

【Arduino】开发入门教程【一】什么是Arduino

Arduino Arduino 是一款便捷灵活、方便上手的开源电子原型平台&#xff0c;包含硬件&#xff08;各种型号的arduino板&#xff09;和软件&#xff08;arduino IDE)。它适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。Arduino&#xff0c;是一个基于开放原始码的软…

【云计算的1024种玩法】回忆经典,用虚拟主机重建复古DZ和无心宠物

前言 在移动互联网和大型网游没有普及前&#xff0c;很多地方论坛或者专业性论坛都会有一个 —— “无心宠物” 插件来引流和吸引用户&#xff0c;可以说是当下网页游戏的老前辈了。还记得我以前就是为了玩这个游戏&#xff0c;就在各个论坛疯狂发帖赚经验&#xff0c;想来还是…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 9. 集成学习(上)

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

java培训分享:java软件开发可以用哪些软件?

从事java相关工作的小伙伴应该都有一个习惯&#xff0c;那就是运用软件的方便来达到高效率工作&#xff0c;本期小编为大家介绍的java培训教程就是关于“java软件开发可以用哪些软件?”的内容&#xff0c;来看看下面的详细介绍吧。 java软件开发可以用哪些软件? MyEclipse 顾…

Ext-第一课基本配置

(1)废话&#xff1a;最近开始学习使用Ext&#xff0c;所以记录下来自己的配置和新的&#xff0c;提供给新手菜鸟们&#xff0c;希望能对你有所帮助。 (2)走着&#xff1a;官方文档&#xff1a;http://www.myext.cn/ext-3.2.1/docs/ 我使用的是ext-3.3.0 下载解压后如下图&#…

Only POT texture can be compressed to PVRTC format

在图片压缩格式 报这个Warning的时候&#xff0c;意思是该图片必须要采用2的幂次方大小才能使用该格式。 POT: Power of Two. 采取方式是在advanced里边&#xff0c;把Non Power of 2 设置一下。或者原图采用幂次方大小。

【青少年编程】【一级】 奔跑的马

奔跑的马 1. 准备工作 &#xff08;1&#xff09;添加背景 Forest 和 Wetland&#xff1b; &#xff08;2&#xff09;添加角色Unicorn Running&#xff1b; &#xff08;3&#xff09;为Unicorn Running 添加声音 Gallop。 2. 功能实现 &#xff08;1&#xff09;点击绿旗…

Python培训教程:Python有哪些比较重要的内置函数?

学习Python技术或者参加Python工作的小伙伴们应该都知道&#xff0c;在Python编程语言中会经常出现很多内置函数&#xff0c;很少有人清楚这些函数&#xff0c;但是它的功能是不可小觑的&#xff0c;下面小编就为大家详细介绍一下Python有哪些比较重要的内置函数? Python培训教…

Oracle Block浅析2:ITL(Interested Transaction List)

一.ITL(Interested Transaction List)&#xff1a; ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分&#xff0c;位于数据块头&#xff08;block header&#xff09;&#xff0c;itl由xid&#xff0c;uba&#xff0c;flag&#xff0c;lck和scn/fsc组成&…

极速发展的饿了么订单系统架构演进

http://www.infoq.com/cn/articles/eleme-order-system-architecture-evolution?utm_sourceinfoq&utm_mediumrelated_content_link&utm_campaignrelatedContent_presentations_clk 本文根据石佳宁在2016ArchSummit全球架构师&#xff08;深圳&#xff09;峰会上的演讲…

【青少年编程(第27周)】报名考级的小朋友注意截止时间!

2021年08月22日&#xff08;周日&#xff09;晚20:00我们在青少年编程竞赛交流群开展了第二十七次直播活动。我们直播活动的主要内容如下&#xff1a; 首先&#xff0c;我们奖励了上周测试超过60分的小朋友。 其次&#xff0c;提醒小朋友们不要忘记9月份等级测试的报名&#x…

找java培训机构有哪些参考标准

java培训机构在市面上越来越多&#xff0c;这对于想要学习java技术的小伙伴们来说是比较难选择的&#xff0c;尤其是零基础的小伙伴&#xff0c;那么到底该如何找适合自己的java培训机构呢?找java培训机构有哪些参考标准?来看看下面小编的详细介绍就知道了。 找java培训机构有…

技术人生:码农必读

1. 过去的事情可以不忘记&#xff0c; 但一定要放下。 2. 收敛自己的脾气&#xff0c;偶尔要刻意沉默&#xff0c;因为冲动会做下让自己无法挽回的事情。 3. 无论什么时候&#xff0c;做什么事情&#xff0c;要思考。 4. 永远不要给背叛过自己的朋友第二次的背叛的机会。 5. 无…

DIY 一套正版、免费、强大的 Visual Studio 2012 IDE

作为开发软件的程序员&#xff0c;应在力所能及的情况下使用正版软件。最近一直在用VisualStudio 2012 Express Desktop/Web 版本开发项目。VisualStudio 2012 Express 是免费的&#xff0c;功能基本上够用&#xff0c;但是还是有很多不足&#xff0c;如&#xff1a; &#xff…

【青少年编程】【三级】 合作画画

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

2021年还适合参加软件测试培训吗

随着互联网行业快速的发展&#xff0c;人们对于互联网技术更为关注&#xff0c;大部分人都想了解2021年还适合参加软件测试培训吗?软件测试在互联网是相对学起来比较简单的&#xff0c;来看看下面的详细介绍吧。 2021年还适合参加软件测试培训吗?在人工智能大数据的飞速发展的…

如何使网站的右键失效

在body标签下加上这行语句οncοntextmenureturn false οndragstartreturn false即<body οncοntextmenureturn false οndragstartreturn false>转载于:https://www.cnblogs.com/huanbia/archive/2013/03/16/2963950.html

【组队学习】孙健坤:基于Python的会员数据化运营

分享人&#xff1a;孙健坤&#xff0c;哈尔滨工业大学 分享内容&#xff1a; 什么是会员制&#xff1f;什么是会员数据化运营&#xff1f;如何进行会员数据化运营 组队学习&#xff1a; 基于Python的会员数据化运营 开源内容&#xff1a; https://github.com/datawhalech…

MySQL , MHA , Haproxy 配置

1. 基本架构 2. 读端口影射 3. 写端口影射 进行一个Health Check MHA Manager对Master节点MySQL 进行存活监控 读FailOver 1 读FailOver 2 写FailOver 1 转载于:https://www.cnblogs.com/kelvin19840813/p/8231999.html

UI培训分享:导航栏UI设计规范及注意事项有哪些?

UI设计学习起来要注意的东西还是有很多的&#xff0c;例如导航栏&#xff0c;导航栏UI设计规范及注意事项有哪些呢?今天小编为大家详细的介绍一下关于导航栏的设计注意事项&#xff0c;希望能够帮助到今后工作的你。 UI培训分享&#xff1a;导航栏UI设计规范及注意事项有哪些?…

【青少年编程】【四级】绘图程序优化

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

分布式文件系统(FastDFS)安装 配置

[TOC] 百度百科&#xff1a; FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了大容量存储和负载均衡的问题。特别适合以文…

javaWeb -- HTTP协议

笔记摘要&#xff1a; 作为web开发的前奏&#xff0c;这里介绍了什么是HTTP协议&#xff0c;HTTP请求与HTTP响应信息的介绍 一、什么是HTTP协议 客户端连上web服务器后&#xff0c;若想获得web服务器中的某个web资源&#xff0c;需遵守一定的通讯格式&#xff0c;HTTP协议用于定…

Python培训:Python有哪些函数?你了解几种?

本期小编要为大家带来的Python教程就是关于Python函数这方面的&#xff0c;我们都知道Python函数&#xff0c;一般是指组织好的、可重复使用的、用来实现单一或相关联功能的代码段&#xff0c;Python函数包含系统中自带的一些函数、第三方函数以及用户自定义的函数。那么Python…

BZOJ2331:[SCOI2011]地板——题解

http://www.lydsy.com/JudgeOnline/problem.php?id2331 题面复制于洛谷 题目描述 lxhgww的小名叫”小L“&#xff0c;这是因为他总是很喜欢L型的东西。小L家的客厅是一个R*C的矩形&#xff0c;现在他想用L型的地板来铺满整个客厅&#xff0c;客厅里有些位置有柱子&#xff0c;…

快速部署RDA Remote Diagnostic Agent

RDA Remote Diagnostic Agent远程诊断代理是Oracle Support售后服务使用的标准工具之一&#xff0c;当用户在Metalink上提交SR(TAR)时可能Oracle GCS(Global Customer Service)支持会需要让用户从MOS上下载RDA工具&#xff0c;通过RDA收集丰富的数据库环境信息(如包含OS、DB、C…

【青少年编程】【三级】计算成绩总和

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

哪些人适合学web前端培训呢

哪些人适合学web前端培训呢?经常会有人问到这个问题&#xff0c;因为互联网对于很多人来说是非常具有诱惑力的&#xff0c;前端便是其中的一种互联网技术&#xff0c;那么针对这个问题&#xff0c;我们来看看下面的详细介绍吧。 哪些人适合学web前端培训呢?首先什么是前端呢?…

ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount

ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount的案例不少&#xff0c;这里我们介绍下如何解决。 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Databas…