日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV 像素存储

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV 像素存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
像素存儲

OpenCV 中圖像矩陣的大小取決于所用的顏色模型,更準確的說是取決于圖像所用到的通道數。
如果使用的是灰度圖,矩陣大概如圖所示:

如果使用的是多通道的圖像,矩陣中的列會包含多個子列,子列的個數和通道數相等。例如 RGB 顏色模型的矩陣大致如下圖所示:

很多情況下,因為內存足夠大,可以實現連續存儲,因此圖像中的各行能夠一行一行的連接起來,形成一個長行。連續存儲有助于提升圖像掃描速度,我們可以使用 isContinuous 來判斷矩陣是不是連續存儲的。

簡單示例

下面模擬實現減少圖像顏色的操作

// ---------------------【 colorReduce() 函數 】------------------
//          描述:使用【指針訪問:C操作符[]】方法版的顏色空間縮減函數
// --------------------------------------------------------------
void colorReduce (Mat& inputImage, Mat& outputImage, int div)
{// 參數準備outputImage = inputImage.clone()j;int rowNumber = outputImage.rows();    // 行號int colNumber =	outputImage.clos * outputImage.channels();    // 列數 * 通道數 = 每一行元素的個數// 雙重循環,遍歷所有的元素for (int i = 0; i < rowNumber; ++i) {uchar* data = outputImage.ptr<uchar>(i);    // 獲取第 i 行的首地址for (int j = 0; j < colNumber; ++j) {//  ------ 【開始處理了每個元素】------data[j] = data[j] / div * div + div / 2;}}
}

Mat 類有若干成員函數,可以獲取到圖像的屬性。公有成員函數變量 cols 和 rows 給出了圖像大的寬和高,而成員函數 channels() 用于返回圖像的通道數。灰度圖的通道數是 1,彩色圖的通道數是3.

以上示例還可以使用迭代器的方式實現

void colorReduce (Mat& inputImage, Mat& outputImage, int div)
{// 參數準備outputImage = inputImage.clone();// 獲取迭代器Mat_<Vec3d>::iterator it = outputImage.begin<Vec3d>();  // 初始位置Mat_<Vec3d>::iterator itend = outputImage.end<Vec3d>()'  // 結束位置for (; it != itend; ++it) {(*it)[0] = (*it)[0] /div * div + div /2;(*it)[1] = (*it)[1] /div * div + div /2;(*it)[2] = (*it)[2] /div * div + div /2;}
}

總結

以上是生活随笔為你收集整理的OpenCV 像素存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。