一、背景介紹
OpenCV是一款開源的計算機視覺庫,可以用於圖像和視頻處理。在實際工作中,我們經常需要對處理完的圖像進行保存,而保存的方式和路徑也是多樣的。本文將圍繞這一主題,詳細介紹如何使用OpenCV將圖像保存到指定路徑。
二、保存圖片到指定路徑的C語言代碼
前置知識:在OpenCV中,使用cvSaveImage函數將圖像保存到文件中。該函數的原型如下所示:
int cvSaveImage(const char* filename, const CvArr* image, const int* params=0)
其中,filename是要保存的文件名,image是圖像數據,params是存儲時要使用的參數,可以不填。函數返回值表示保存結果,0表示失敗,大於0表示成功。
下面是將圖像保存到指定路徑的C語言代碼:
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
if (argc != 3) {
cout << "Usage: SaveImage image_path save_path" << endl;
return -1;
}
const char *image_path = argv[1];
const char *save_path = argv[2];
IplImage* img = cvLoadImage(image_path);
if (!img) {
cout << "Fail to load image from " << image_path << endl;
return -2;
}
if (!cvSaveImage(save_path, img)) {
cout << "Fail to save image to " << save_path << endl;
return -3;
}
cvReleaseImage(&img);
cout << "Image has been saved to " << save_path << endl;
return 0;
}
該代碼通過命令行參數傳入了原圖路徑和保存路徑,載入原圖後使用cvSaveImage函數保存到指定路徑中。注意,函數返回值為0表示保存失敗。
三、在圖像中添加文字並進行保存
如果需要在圖片中添加一些文字說明,我們可以使用OpenCV提供的繪圖函數。下面是一個例子,將一些文本添加到圖像中,並進行保存:
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
if (argc != 3) {
cout << "Usage: AddText image_path save_path" << endl;
return -1;
}
const char *image_path = argv[1];
const char *save_path = argv[2];
IplImage* img = cvLoadImage(image_path);
if (!img) {
cout << "Fail to load image from " << image_path << endl;
return -2;
}
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);
cvPutText(img, "Hello, OpenCV!", cvPoint(20, 50), &font, cvScalar(0, 255, 0));
if (!cvSaveImage(save_path, img)) {
cout << "Fail to save image to " << save_path << endl;
return -3;
}
cvReleaseImage(&img);
cout << "Image has been saved to " << save_path << endl;
return 0;
}
該代碼使用cvPutText函數將文本添加到圖像中,具體用法可參考OpenCV官方文檔。如果需要更改文本樣式,可以通過CvFont結構體進行設置。
四、圖片質量設置及參數說明
在使用OpenCV保存圖像時,可以通過參數來設置圖片的壓縮格式、保存質量等參數。下面是各個參數的說明:
- filename:要保存的文件名。
- image:圖像數據。
- params:存儲時要使用的參數,可以為NULL。
params的取值可以為以下幾種:
- NULL:使用默認值,即圖片質量為95。
- int數組:數組長度為1,表示圖片質量,取值為0~100。0表示最小尺寸和最大壓縮,100表示最大尺寸和最小壓縮。
- CV_IMWRITE_JPEG_QUALITY:數組長度為1,表示jpeg圖像質量,取值為0~100,0表示最小質量,100表示最大質量。
- CV_IMWRITE_PNG_COMPRESSION:數組長度為1,表示png圖像壓縮比,取值為0~9,0表示最小壓縮,9表示最大壓縮。
- CV_IMWRITE_PXM_BINARY:數組長度為1,表示pbm、pgm、ppm圖像格式。0表示ascii格式,1表示二進位格式。
- CV_IMWRITE_WEBP_QUALITY:數組長度為1,表示webp圖像質量,取值為0~100,0表示最小質量,100表示最大質量。
- CV_IMWRITE_WEBP_COMPRESSION:數組長度為1,表示webp圖像壓縮比,取值為0~100,0表示最小壓縮,100表示最大壓縮。
- CV_IMWRITE_TIFF_COMPRESSION:數組長度為1,表示tiff圖像壓縮方式,取值為0~9,0表示不壓縮,1表示LZW壓縮,2表示JPEG壓縮,其他值表示zip壓縮。
下面是一個例子,將圖像保存為jpeg格式,質量為70:
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
if (argc != 3) {
cout << "Usage: SaveImage image_path save_path" << endl;
return -1;
}
const char *image_path = argv[1];
const char *save_path = argv[2];
IplImage* img = cvLoadImage(image_path);
if (!img) {
cout << "Fail to load image from " << image_path << endl;
return -2;
}
int params[3] = {CV_IMWRITE_JPEG_QUALITY, 70, 0};
if (!cvSaveImage(save_path, img, params)) {
cout << "Fail to save image to " << save_path << endl;
return -3;
}
cvReleaseImage(&img);
cout << "Image has been saved to " << save_path << endl;
return 0;
}
五、總結
本文詳細介紹了使用OpenCV保存圖片到指定路徑的方法,並給出了相應的C語言代碼示例。同時,還講解了如何在圖片中添加文字以及圖片保存質量的設置和參數說明。希望本文對讀者在實際工作中處理圖像有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/300583.html