使用OpenCv操作 分析畫素的基礎核心操作

2021-07-25 00:23:06 字數 1811 閱讀 5083

基礎知識

(1)opencv的影象格式

一般的影象檔案格式使用的是 unsigned 8bits

cvmat矩陣對應的引數型別就是

cv_8uc1,cv_8uc2,cv_8uc3。

最後的1、2、3表示通道數

最常用的是rgb三通道影象,cv_8uc3

而float 是32位的,對應cvmat資料結構引數就是:cv_32fc1,cv_32fc2,cv_32fc3...

double是64bits,對應cvmat資料結構引數:cv_64fc1,cv_64fc2,cv_64fc3等。

(2)cv::mat 和cvmat的區別

cv::mat是乙個類(class),而cvmat是乙個struct,從型別上就可以知道二者存在很大區別。前者除了幾個成員變數之外還有很多的成員函式和過載函式,可以實現很多的影象資料處理功能,而後者只有幾個成員變數,要對其成員進行一些處理,需要借用別的函式。

(3)scalar

scalar可以理解成設定顏色

scalar(0)是單通道的黑色

scalar(0,0,0)是三通道rgb的黑色,注意opencv順序是bgr

載入一張影象獲取解析度

建立乙個三通道rgb的 mat預設設為藍色

cv::mat img2(height, width, cv_8uc3, cv::scalar(255, 0, 0));

對影象畫素進行取值和修改賦值的方法

for (int i = 0; i < height/2; i++)

for (int j = 0; j (i,j) = cv::vec3b(0,0,255);

}

for (int i = 0; i < height/2; i++)

for (int j = 0; j (i, j*img2.channels() + n)=0;

else if (n == 1)

img2.at(i, j*img2.channels() + n) = 0;

else if (n == 2)

img2.at(i, j*img2.channels() + n) = 255;

}

影象畫素的部分拷貝

for (int i = 0; i < height*width; i++)

}

影象轉殖,a是mat影象

mat f = a.clone();

mat g;

a.copyto(g);

影象顯示、更新與儲存

//imshow用於顯示和更新

cv::imshow("result", result);

opencv畫素操作

1 bit depth 位元數 代表8bite,16bites,32bites,64bites 舉個例子吧 比如說,如 如果你現在建立了乙個儲存 灰度的mat物件,這個影象的大小為寬100,高100,那麼,現在這張 灰度中有10000個畫素點,它每乙個畫素點在記憶體空間所佔的空間大小是8bite,8...

OpenCV 操作畫素(訪問畫素值)

為構建計算機視覺應用程式,我們需要學會訪問影象的內容,有時也要修改或者建立影象。本章將講講如何操作影象的元素 即畫素 影象本質上就是由陣列組成的矩陣。opencv使用了cv mat結構來操作影象。矩陣中的每乙個元素表示乙個畫素。對灰度影象而言,畫素是8位無符號數 資料型別為unsigned char...

OpenCV 畫素操作相關

print b,g,r img 100,100 返回影象 100,100 畫素處bgr的值,注意 opencv讀取的時候是bgr,不是rgb 因為返回的是元組,所以 b,g,r 得到畫素值 print b,g,r for i in range 1,100 img 10 i,100 255,0,0 c...