1. 程式人生 > >OpenCV之基礎學習:矩陣的掩膜操作

OpenCV之基礎學習:矩陣的掩膜操作

根據自己在網課上的學習,記錄一些筆記,加深記憶,在這裡分享出來,大家一起學習,自己程式設計能力有限,對於一些專業名詞的運用可能不太得當,不過希望能夠讓自己不斷進步。如有不足不嚴謹之處希望大家指出來。

這一次學習的是矩陣掩膜操作。

1.掩膜操作可以實現影象對比度的調整,使得影象可以銳化,提高影象對比度。

公式為:I(i,j)=5*I(i,j)-[I(i-1,j)+I(i+1,j)+I(i,j-1)+I(i,j+1)]

實質就是如下矩陣:


對應下面的圖:


首先了解一下如何獲取影象畫素指標 :

定義一個uchar型別的指標指向當前行,uchar*currentRow=Mat.ptr<uchar>(row)

  行數從0開始,currentRow[col]即使代表畫素值p(row, col)。

再掌握一個函式的運用,saturate_cast<uchar>(畫素值i),如果i<=0,返回0,如果i>=255,返回255,如果i在0~255之間那麼就返回當前值,該函式是確保rgb值範圍在0~255之間。

2.自制掩膜

#include <iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, const char * argv[]) {
    Mat src,dst;
    src=imread("/Users/Meng/Documents/cscpp/Pictures/qinxi.jpg");
    namedWindow("original image",CV_WINDOW_NORMAL);
    imshow("original image", src);
    
    int cols=(src.cols-1)*src.channels();//獲取畫素的列,三通道
    int offsetx=src.channels();//有幾個通道
    int rows=src.rows;//image row
    dst=Mat::zeros(src.size(), src.type());//set the default color into black  是從矩陣的(1,1)開始的所以行列應該寫好
    for(int row=1;row<(rows-1);row++){
        const uchar*current=src.ptr<uchar>(row);//get the current row;
        const uchar*previous=src.ptr<uchar>(row-1);//the previous row
        const uchar*next=src.ptr<uchar>(row+1);//the next row;
        uchar*output=dst.ptr<uchar>(row);
        for(int col=offsetx;col<cols;col++){
            output[col]=saturate_cast<uchar>(5*current[col]-(current[col-offsetx]+current[col+offsetx]+previous[col]+next[col]));//use mask kernel to recaculate xiangsu value,then enhance picture contrast
        }
    }
    namedWindow("image after enhance contrast",CV_WINDOW_NORMAL);
    imshow("image after enhance contrast", dst); waitKey(0);return 0;}

3.利用filter2D實現掩膜操作

 filter2D(src,dst,src.depth(),kernel),其中src.depth()可以直接用-1代替,kernel就是矩陣的掩膜。

  Mat kernel=(Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
    filter2D(src, dst, src.depth(), kernel);//src.depth()=-1
    namedWindow("image after enhanced contrast2",CV_WINDOW_NORMAL);
    imshow("image after enhanced contrast2", dst);
    

4.結束語

以上就是矩陣的掩膜操作,還是比較容易理解的,以後可以結合影象模糊的運用使得影象更加精緻,大家快上手操作運用一下吧~

最近馬上畢業了,自己總愛胡思亂想,希望能有勇氣做自己想做的事,坦坦蕩蕩的樣子最好。

相關推薦

OpenCV基礎學習矩陣操作

根據自己在網課上的學習,記錄一些筆記,加深記憶,在這裡分享出來,大家一起學習,自己程式設計能力有限,對於一些專業名詞的運用可能不太得當,不過希望能夠讓自己不斷進步。如有不足不嚴謹之處希望大家指出來。這一次學習的是矩陣掩膜操作。1.掩膜操作可以實現影象對比度的調整,使得影象可以

矩陣操作-API呼叫

#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace c

OpenCV學習第三篇圖片的操作(實現影象的對比度調整)

掩膜操作實現影象的對比度調整 矩陣的掩膜操作十分簡單,根據掩膜來重新計算每個畫素的畫素值,掩膜(mask也被稱為kernel) I(i,j) = 5* I(i,j)-[I(i-1,j)+I(i+1,

Introduction to 3D Game Programming with DirectX 12 學習筆記 --- 第二章矩陣代數

學習目標: 理解矩陣和與它相關的運算; 理解矩陣的乘法如何被看成是線性組合; 理解單位矩陣、轉置矩陣、矩陣的行列式和逆矩陣; 熟悉DirectX Math庫中矩陣相關的類和函式; 1 矩陣的定義 一個m x n的矩陣M是一個有實陣列成的

OpenCV靜心修煉總結篇2——矩陣操作

獲取影象畫素指標 CV_Assert(myImage.depth() == CV_8U); Mat.ptr<uchar>(int i=0) 獲取畫素矩陣的指標, 索引 i 表示第幾行, 從 0 開始計行數。 獲得當前行指標 const uchar* current= myImage

Opencv--矩陣

掩膜定義: 首先我們從物理的角度來看看mask到底是什麼過程。 在半導體制造中,許多晶片工藝步驟採用光刻技術,用於這些步驟的圖形“底片”稱為掩膜(也稱作“掩模”),其作用是:在矽片上選定的區域中對一個不透明的圖形模板遮蓋,繼而下面的腐蝕或擴散將隻影響選定的區域以外的區域。 用選定的影

java基礎學習JavaWebServlet

其他更多java基礎文章: java基礎學習(目錄) 什麼是Servlet Servlet是一個特殊的Java類, 是執行在 Web 伺服器中的小型 Java 程式(即:伺服器端的小應用程式)。servlet 通常通過 HTTP(超文字傳輸協議)接收和響應來自 Web 客戶端的請求。這個Java類必須

java基礎學習JavaWebEL表示式

其他更多java基礎文章: java基礎學習(目錄) 一、EL表示式 EL 全名為Expression Language。JSP中可以使用EL表示式,EL表示式是用"${}"括起來的指令碼,用來更方便地讀取物件,EL表示式寫在JSP的HTML程式碼中,而不能寫在"<%%>"引起的JSP指令

java基礎學習JavaWebCookie和Session

其他更多java基礎文章: java基礎學習(目錄) 一、會話概述 1.1、什麼是會話? 會話可簡單理解為:使用者開一個瀏覽器,點選多個超連結,訪問伺服器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話其中不管瀏覽器傳送多少請求,都視為一次會話,直到瀏覽器關閉,本次會話結束。 其中注意,一個瀏

java基礎學習JavaWebJSP

其他更多java基礎文章: java基礎學習(目錄) 本章內容較多,全部認真看完可能需要一小時以上,建議邊看邊做筆記,否則容易混亂 一、JSP概述 1.1、JSP結構 網路伺服器需要一個JSP引擎,也就是一個容器來處理JSP頁面。容器負責截獲對JSP頁面的請求。內嵌JSP容器的Apache支援JS

java基礎學習JavaWebrequest和response

其他更多java基礎文章: java基礎學習(目錄) 學習request和response之前先學習一下http請求 HTTP請求 瀏覽器向伺服器請求某個web資源時,稱之為瀏覽器向伺服器傳送了一個http請求。一個完整http請求應該包含三個部分: 請求行【描述客戶端的請求方式、請求的資源

OpenCV--矩陣操作

所謂掩膜其實就是一個矩陣,然後根據這個矩陣重新計算圖片中畫素的值。 掩膜主要有以下用途: 提取感興趣區,用預先製作的感興趣區掩模與待處理影象相乘,得到感興趣區影象,感興趣區內影象值保持不變,而區外

OpenCV-影象處理(02、矩陣操作

1. 獲取影象畫素指標 CV_Assert(myImage.depth() == CV_8U); Mat.ptr(int i=0) 獲取畫素矩陣的指標,索引i表示第幾行,從0開始計行數。 獲得當前行指標const uchar* current= myImage.p

Tensorflow深度學習十九矩陣切片與連結

1、TensorFlow矩陣切片操作:tf.slice函式 函式原型:slice(input_, begin, size, name=None) 引數: input:待切片的矩陣tensor。 begin:起始位置,表示從哪一個資料開始進行切片。這個起始

Introduction to 3D Game Programming with DirectX 12 學習筆記 --- 第二章矩陣代數

bin 存在 present 文檔 spec 它的 height math.h defined 原文:Introduction to 3D Game Programming with DirectX 12 學習筆記之 --- 第二章:矩陣代數

《神經網路的梯度推導與程式碼驗證》數學基礎矩陣微分與求導

本內容為神經網路的梯度推導與程式碼驗證系列內容的第一章,更多相關內容請見《神經網路的梯度推導與程式碼驗證》系列介紹。  目錄 1.1 數學符號 1.2 矩陣導數的定義和佈局 1.3 矩陣求導的優勢 1.4 矩陣微分與矩陣求導 1.5 矩陣微分性質歸納 1.6 標

Nginx服務器基礎學習

下載到本地 ces image nginx安裝 work 網絡數 設備 老版本 win 一、Nginx介紹 nginx:Nginx是一種軟件服務器(輕量級),故它最主要的功能就是可以與服務器硬件結合,我們的應用程序可以放在nginx服務器上進行發布,已達到讓網民瀏覽的效

SQL 基礎學習 和深度學習資料

原子 rom 深度學習 允許 important href system 持久 cti SQL is a standard language for storing, manipulating and retrieving data in databasee. 關系型數據庫

Hadoop基礎學習基於Hortonworks HDP

Hadoop基礎學習:基於Hortonworks HDP 我最開始是通過Hadoop Fundamentals這個課程學習了Hadoop的基礎知識,該課程使用了Hortonworks的HDP作為Hadoop平臺。HDP是一個與Cloudera, MapR類似的一個企業級Hadoop解決方案,而H

MVC案例查詢學習HTTP狀態500 - java.lang.NullPointerException

這幾天都在看servlet和jsp的視訊,早上看完MVC案例的查詢,沒想到一個小小的錯誤搞了我差不多一個下午,還是得多點記錄總結,以後絕不再犯同樣的錯誤! 這個查詢主要是通過點選 test.jsp 頁面的超連結來檢視資料庫裡面的資料資訊。 1.首先有一個 test.jsp 用來顯示連結並