opencv3 图像处理(一)图像缩放( python与c++ 实现)
2018-01-05 16:02
831 查看
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中图像伪彩色处理(C++ / Python)
- 图像配准 - 三张灰度图合成彩色图 ECC算法 OpenCV C++/Python实现
- opencv实现图像缩放及canny边缘处理
- 图像处理之其他杂项(五)之水平集 LevelSet 代码实现 opencv c++ (转载)
- Python-OpenCv之图像基本处理-平移,缩放,旋转,翻转,裁剪及仿射变换
- OpenCV3计算机视觉Python语言实现(三):使用OpenCV3处理图像
- C++ OpenCV 实现RGB彩色图像转化成灰度图像再转换成二值图像
- 实现OpenCV的视频图像处理
- 【数字图像处理】<纯C++>读取、裁剪、缩放、旋转和存储8位bmp灰度图像
- Ribbon+Opencv 2.4--实现一个简单的Opencv图像处理小工具
- OPENCV下针对IplImage实现图像增强处理
- opencv实现图像缩放
- opencv缩放图像的实现
- 基于opencv和c++的图像处理:直方图均衡化
- 【数字图像处理】YUV420转RGB并BMP存储<纯C++实现>
- 借助OpenCV实现照片中图像的处理1
- 基于opencv和c++的图像处理:直方图匹配
- OpenCV实现对图像的光照归一化处理
- 借助OpenCV实现照片中图像的处理2