void Resize(const CvArr* src,CvArr* dst,intinterpolation=CV_INTER_LINEAR);
src 表示輸入圖像。
dst表示輸出圖像。
intinterpolation插值方法,有如下四種:pythonCV_INTER_NN - 最近鄰插值,
CV_INTER_LINEAR - 雙線性插值 (缺省值)
CV_INTER_AREA - 使用象素關係重採樣。當圖像縮小時候,該方法能夠避免波紋出現。當圖像放大時,相似於 CV_INTER_NN 方法..
CV_INTER_CUBIC - 立方插值.ios
python: cv2.imread(filename[, flags]) → retval c++: Mat imread(const string& filename, int flags=1 )
filename 表示圖像的路徑和名稱(不在工做路徑要提供絕對路徑,不然讀不到也不會報錯)
params 表示 的加載方式
python:c++cv2.IMREAD_COLOR:讀入一副彩色圖像。圖像的透明度會被忽略, 這是默認參數。
cv2.IMREAD_GRAYSCALE:以灰度模式讀入圖像函數
c++:spa
CV_LOAD_IMAGE_COLOR 彩色
CV_LOAD_IMAGE_GRAYSCALE 灰度code
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++必須根據根式設置正確,不然保存不了圖片。圖片
參數與保存的圖像類型相關,若是參數未指定文件保存不成功,具體根據保存的圖像類型具體設置原型
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。string
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)
#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