pgm图像缩小C语言,OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )

转自: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& 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 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

#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<

}

//imshow("image", image);

//image.cols为图像的宽度 image.cols为图像的高度

int w = image.cols;

int h = image.rows;

std::cout<

imageResize(image,&dst,w * 2, h * 2);

std::cout<

vector 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

openCV(三)---图像缩放

UIImage *img1 = [UIImage imageNamed:@"1448941176867"]; //将UIImage转换为IplImage格式 IplImage *p ...

opencv学习笔记3——图像缩放,翻转和阈值分割

#图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...

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

opencv3 图像处理 之 图像缩放( python与c++实现 ) 一. 主要函数介绍 1) 图像大小变换 Resize () 原型: void Resize(const CvArr* src,C ...

【python图像处理】图像的缩放、旋转与翻转

[python图像处理]图像的缩放.旋转与翻转 图像的几何变换,如缩放.旋转和翻转等,在图像处理中扮演着重要的角色,python中的Image类分别提供了这些操作的接口函数,下面进行逐一介绍. 1.图 ...

邻近双线性插值图像缩放的Python实现

最近在查找有关图像缩放之类的算法,因工作中需要用到诸如此类的图像处理算法就在网上了解了一下相关算法,以及其原理,并用Python实现,且亲自验证过,在次与大家分享. 声明:本文代码示例针对的是plan ...

opencv学习笔记——图像缩放函数resize

opencv提供了一种图像缩放函数 功能:实现对输入图像缩放到指定大小 函数原型: void cv::resize ( InputArray src, OutputArray dst, Size ds ...

OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 图像 ...

<; python PIL - 批量图像处理 - RGB图像生成灰度图像 >;

< python PIL - 批量图像处理 - RGB图像生成灰度图像 > 直接用python自带的PIL图像库,将一个文件夹下所有jpg/png的RGB图像转换成灰度/黑白图像 from ...

c#数字图像处理(十)图像缩放

图像几何变换(缩放.旋转)中的常用的插值算法 在图像几何变换的过程中,常用的插值方法有最邻近插值(近邻取样法).双线性内插值和三次卷积法. 最邻近插值: 这是一种最为简单的插值方法,在图像中最小的单位 ...

随机推荐

WCF Security基本概念(转载)

WCF Security 主要包括 "Transfer Security"."Access Control"."Auditing" 几个部分 ...

arc下dealloc得处理

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

Keil 二进制数输入宏

源:http://hi.baidu.com/skystalker/item/e7679cd79c6f751220e250c1?qq-pf-to=pcqq.c2c 在C语言中有十进制,十六进制,八进制; ...

Redis的发布订阅及.NET客户端实现

序言 发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新. 然而它也有自己的缺点,就是当主题发生一系列的变化时 ...

bzoj 1171 大sz的游戏&; 2892 强袭作战 (线段树+单调队列+永久性flag)

大sz的游戏 Time Limit: 50 Sec  Memory Limit: 357 MBSubmit: 536  Solved: 143[Submit][Status][Discuss] Des ...

webrtc如何进行错误恢复

视频的压缩方法:(三种帧) 为了视频尽可能的保持高效,视频数据通过不同的编码进行压缩.以帧为单位进行压缩,按照压缩中的不同作用可分类为:内帧(Intra-frames,I帧),预测帧(Predicti ...

自学Python6.4-内置模块(2)

自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

RBAC用户权限管理数据库设计【转载】

本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...

linux学习——sed工具

命令格式: sed [-nefr] [动作] 1.sed可以分析标准输入(STDIN)的数据,然后将数据处理后,再将他输出到标准输出(STDOUT),他有替换.删除.新增.选定特定行等处理功能.sed ...

你可能感兴趣的:(pgm图像缩小C语言)