一、imencode的基本概念
imencode是OpenCV中常用的編碼函數,用於將矩陣或圖像編碼為指定格式的二進制或字符串。
對於圖像而言,imencode函數可以將其編碼為常見的圖像格式,例如JPEG、PNG、BMP等。
對於視頻而言,imencode函數可以將其編碼為支持的視頻格式,如H.264、MPEG-4等。
二、imencode常見用法
以下是imencode函數最基本的用法:
bool imencode(const string& ext, InputArray img, vector<uchar>& buf, const vector<int>& params=vector<int>());
其中,ext是編碼後的文件擴展名,img是要編碼的圖像或矩陣,buf是編碼後的數據存儲區,params是編碼的參數。
以下是一個示例,將一張圖像編碼為JPEG格式:
Mat img = imread("image.jpg"); vector<uchar> buf; imencode(".jpg", img, buf);
三、imencode函數參數詳解
1. ext參數
ext是表示編碼後的文件格式,只是表示文件擴展名,可以是”.jpg”、”.png”或其他格式的擴展名。imencode函數將根據指定的擴展名來確定要使用的編碼器。
注意,ext參數並不直接指定編碼器,因此在某些情況下,指定不正確的擴展名可能會產生意外效果。
以下是一個示例:
Mat img = imread("image.jpg"); vector<uchar> buf; imencode(".png", img, buf);
雖然我們將輸入的圖像讀取方式為JPEG格式,但是由於輸出的擴展名為”.png”,所以實際上輸出的編碼格式會是PNG格式。
2. img參數
img參數是我們要編碼的圖像或矩陣。如果要編碼的是單張圖像,則必須是一個Mat類型的變量。如果要編碼的是一組圖像,則可以使用std::vector<Mat>類型的變量。
3. buf參數
buf參數是存儲編碼後數據的緩衝區。它是一個vector<uchar>類型的數組,它將保存所有編碼後的數據。如果緩衝區中已經存在數據,則編碼後的數據將追加到緩衝區末尾。
4. params參數
params參數是一個可選的參數,它是一個vector<int>類型的數組,用於設置編碼的參數。編碼器根據設置的參數來編碼圖像。
以下是一些常用的參數:
- CV_IMWRITE_JPEG_QUALITY:用於設置JPEG格式的壓縮質量。範圍從0到100,默認為95。
- CV_IMWRITE_PNG_COMPRESSION:用於設置PNG格式的壓縮質量。範圍從0到9,默認為3。
- CV_IMWRITE_WEBP_QUALITY:用於設置WEBP格式的壓縮質量。範圍從1到100,默認為80。
- CV_IMWRITE_WEBP_COMPRESSION:用於設置WEBP格式的壓縮級別。範圍從0到6,默認為4。
以下是一個示例,將一張圖像編碼為JPG格式並設置壓縮質量為80:
Mat img = imread("image.jpg"); vector<uchar> buf; vector<int> params = {CV_IMWRITE_JPEG_QUALITY, 80}; imencode(".jpg", img, buf, params);
四、總結
本文介紹了imencode函數的基本概念和常見用法。我們了解了該函數的四個參數:擴展名、圖像、緩衝區和參數。通過設置這些參數,我們可以將圖像或矩陣編碼為指定的格式,並保存到指定的文件夾中。這對於圖像與視頻的儲存與傳輸非常重要有實際意義。
原創文章,作者:AGND,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150188.html