openCV2 第二講 操作畫素

2021-06-27 04:40:54 字數 1449 閱讀 8156

畫素是的基本元素,所以一張的內容可以用乙個畫素矩陣來表示。畫素矩陣的每個元素代表著乙個畫素,這個元素的型別視情況而定,可以是整型(cv_8u)或者浮點型(cv_32f)。還有要注意的是乙個畫素它的通道數,例如,如果是灰度影象的話,它的通道數就是1。對於彩色影象來說的話,就是三個通道了,分別是r,g,b(紅,綠,藍)。

首相對於乙個矩陣來說的話,肯定有行和列,只有指定了相應的行和列,才能定位到乙個畫素點。對於操作的畫素是單通道的話,返回的值就是乙個數值,對於多通道的話,就是乙個向量。此處要注意了!!!

好的,不廢話了,現在開始講了,在開始之前,讓我們先來記幾個東西,cols表示矩陣的列數,rows表示行數。channels()表示的是影象的通道數,指定某乙個畫素點可以用at《畫素型別》(j,i)[k].其中畫素型別可以是uchar,或者是cv::vec3b(這個表示3個uchar),j表示某行,i表示某列,k表示第幾個通道。好了,開始講正題了。我們先從下面乙個例子來講述吧。

這個例子是為了實現將乙個中的畫素隨機設定為白色(鹽雜訊)。

上面的結果圖,在中有很多白點。

現在我來就上面的程式重點解釋一下,首先上一章講過的我就不在重複了,就這次新出現的著重解釋一下;

首先,定義了乙個salt()函式,主要是用來實現對這個影象隨機取白的作用,具體實現函式請看裡面的程式。salt()函式有兩個引數,第乙個引數是要處理的,第二個引數是要隨機取白的點數。

接著往下看,rand()是隨機數生成函式,qt中可以使用qrand()。

rand()%image.cols表示隨機取一列,然後賦給i;同理rand()%image.rows表示隨機取一行,然後賦給j。

image.channles()表示這個影象的通道數,如果等於1的話,就表示是灰度影象,那麼對它的某個畫素執行操作的話就是用image.at(j,i)=255;這句話表示對第j行,第i列的那個畫素取白。

如果等於3的話則表示是彩色影象,那麼就有第三個同道,分別是r,g,b。  image.at(j,i)[k]=255;表示對該影象第j行,第i列畫素的第k個通道賦值255。因為畫素有三個通道,所以有類似的三句,但通道數k不一樣。

然後再來看看mian()函式,第一句跟上講差不多,但是也有點不同,imread("qie.jpg",0);後面的那個0表示是對該影象進行灰度表示,也就是說無論該影象是什麼影象,彩色的,還是灰度的,都變成灰度影象。

然後salt(image,5000);就是呼叫salt()函式,處理是」qie.jpg「,取白點數是5000;

好了,其他的語句跟上次差不多,這章就講到這。

opencv(2) 處理畫素值

opencv中使用mat資料型別表示影象,這是類似int float等傳統型別的一種opencv中定義的資料型別。opencv常見的資料型別 point 代表二維點,用於影象座標點。如point 20,80 scalar 表示4元素標量,常用於rgb顏色值,一般第四個引數用不到。畫素是由顏色空間或通...

OpenCV2鄰域和模板操作

在影象處理中,通過當前位置的鄰域畫素計算新的畫素值是很常見的操作。當鄰域包含影象的上幾行和下幾行時,就需要同時掃瞄影象的若干行,這就是影象的鄰域操作了。至於模板操作是實現空間濾波的基礎,通常是使用乙個模板 乙個的矩形 滑過整幅影象產生新的畫素。下面介紹通過使用opencv2實現laplace運算元銳...

OpenCV2鄰域和模板操作

在影象處理中,通過當前位置的鄰域畫素計算新的畫素值是很常見的操作。當鄰域包含影象的上幾行和下幾行時,就需要同時掃瞄影象的若干行,這就是影象的鄰域操作了。至於模板操作是實現空間濾波的基礎,通常是使用乙個模板 乙個的矩形 滑過整幅影象產生新的畫素。下面介紹通過使用opencv2實現laplace運算元銳...