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 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
opencv3 图像处理(一)图像缩放( python与c++ 实现)的更多相关文章
- OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )
转自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函数介绍 1) 图像大小变换 cvResize () 原型: voidcvResize(co ...
- 【python图像处理】图像的缩放、旋转与翻转
[python图像处理]图像的缩放.旋转与翻转 图像的几何变换,如缩放.旋转和翻转等,在图像处理中扮演着重要的角色,python中的Image类分别提供了这些操作的接口函数,下面进行逐一介绍. 1.图 ...
- 邻近双线性插值图像缩放的Python实现
最近在查找有关图像缩放之类的算法,因工作中需要用到诸如此类的图像处理算法就在网上了解了一下相关算法,以及其原理,并用Python实现,且亲自验证过,在次与大家分享. 声明:本文代码示例针对的是plan ...
- < python PIL - 批量图像处理 - RGB图像生成灰度图像 >
< python PIL - 批量图像处理 - RGB图像生成灰度图像 > 直接用python自带的PIL图像库,将一个文件夹下所有jpg/png的RGB图像转换成灰度/黑白图像 from ...
- Python图像处理丨图像腐蚀与图像膨胀
摘要:本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法. 本文分享自华为云社区<[Python图像处理] 八.图像腐蚀与图像膨胀>,作者: eastmount . ...
- c#数字图像处理(十)图像缩放
图像几何变换(缩放.旋转)中的常用的插值算法 在图像几何变换的过程中,常用的插值方法有最邻近插值(近邻取样法).双线性内插值和三次卷积法. 最邻近插值: 这是一种最为简单的插值方法,在图像中最小的单位 ...
- 图像缩放_OpenCv
图像缩放是一种比较简单的图像处理操作,这里给出opencv中的代码, opencv的版本C语言接口 int resize_c() { const char *pstrImageName = " ...
- opencv2 矩阵方式 resize图像缩放代码(转载)
http://blog.sina.com.cn/s/blog_74a459380101r0yx.html opencv2 矩阵方式 resize图像缩放代码(转载) (2014-05-16 09:55 ...
- 实现基于最近邻内插和双线性内插的图像缩放C++实现
平时我们写图像处理的代码时,如果需要缩放图片,我们都是直接调用图像库的resize函数来完成图像的缩放.作为一个机器视觉或者图像处理算法的工作者,图像缩放代码的实现应该是必须掌握的.在众多图像缩放算法 ...
随机推荐
- mormot支持TCP/IP
mormot支持TCP/IP http.sys本来就构建于TCP/IP之上,因此HTTP.SYS是支持TCP/IP连接的. 笔者为此特意写了一个测试DEMO.TCP/IP连接成功. 如果客户端过一段时 ...
- CSS魔法堂:那个被我们忽略的outline
前言 在CSS魔法堂:改变单选框颜色就这么吹毛求疵!中我们要模拟原生单选框通过Tab键获得焦点的效果,这里涉及到一个常常被忽略的属性--outline,由于之前对其印象确实有些模糊,于是本文打算对其 ...
- java.lang.NumberFormatException: multiple points错误问题
最近项目一直会出现时间转换报错,一直不知道是什么问题??? java.lang.NumberFormatException: multiple points at sun.misc.Float ...
- SQLite在.NET中自适应32位/64位系统
如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...
- URL参数编码
简单明了区分escape.encodeURI和encodeURIComponent 一.前言讲这3个方法区别的文章太多了,但是大部分写的都很绕.本文试图从实践角度去讲这3个方法. 二.escape和它 ...
- 微信支付 python版
需求: 微信打开商品列表页面-> 点击商品后直接显示付款页面-> 点击付款调用微信支付 说明 微信支付需要你申请了公众号(appid, key - 用于签名), 商户号(mch_id, A ...
- android自己定义控件之飞入飞出控件
近期呢,本人辞职了.在找工作期间.不幸碰到了这个求职淡季,另外还是大学生毕业求职的高峰期,简历发了无数份却都石沉大海.宝宝心里那是一个苦啊! 翻着过去的代码,本人偶然找到了一个有意思的控件.那时本人还 ...
- Emacs 不将M-Del删除的单词加入粘贴板
原文:https://jblevins.org/log/clipboard I use a clipboard manager called Copied that syncs previously ...
- 【PHP】PHP的安装和配置
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于W ...
- TensorFlow+Keras 03 TensorFlow 与 Keras 介绍
1 TensorFlow 架构图 1.1 处理器 TensorFlow 可以在CPU.GPU.TPU中执行 1.2 平台 TensorFlow 具备跨平台能力,Windows .Linux.Andro ...