學習筆記 OpenCV C 一)

2021-10-02 15:31:58 字數 3035 閱讀 6173

22:38

載入影象 cv::imread

功能是載入影象檔案成為乙個mat物件,

其中第乙個引數表示影象檔案名稱

第二個引數表示載入的影象是什麼型別,支援常見的三個引數值

imread_unchanged(<0)表示載入原圖,不做任何改變

imread_grayscale(0)表示把原圖作為灰度影象載入進來

imread_color(>0)表示把原圖作為rgb影象載入進來

注意:opencv支援jpg、png、tiff等常見格式影象檔案載入

顯示影象(cv::namedwindos與cv::imshow)

namedwindos功能是建立乙個opencv視窗,它是由opencv自動建立與釋放,無需去銷毀它,(注意:早期版本需要destroy銷毀)

常見用法namedwindow("window title",window_autosize)

window_autosize會自動根據影象大小,顯示視窗大小,不能人為改變視窗大小

window_normal跟qt整合的時候會使用,允許修改視窗大小

imshow根據視窗名稱顯示影象到指定視窗去,第乙個引數是視窗名稱,第二個引數是mat物件

修改影象 cv::cvtcolor

cvtcolor的功能是把影象從乙個彩色空間轉換到另乙個色彩空間,有三個引數,第乙個引數表示源影象,第二個引數表示色彩空間轉換後影象,第三個影象表示源和目標色彩空間如:color_bgr2hls、color_bgr2gray等

cvtcolor(image,gray_image,color_bgr2gray);

儲存影象 cv::imwrite

imwrite("路徑名",名);

#include

#include

#include

using namespace cv;

int main(int argc,char** ar**)

namedwindow("opencv setup demo",cv_window_autosize);

imshow("opencv setup demo",src);

namedwindow("output windows",cv_window_autosize);

mat output_image;

cvtcolor(src,output_image,cv_bgr2hls);

imshow("output windows",output_image);

imwrite("路徑名",output_image);

waitkey(0);

return 0;

}獲取影象畫素指標

cv_assert(myimage.depth()==cv8u);

mat.ptr(int i = 0)獲取畫素矩陣的指標,索引i表示第幾行,從0開始計行數

獲得當前行指標const uchar* current = myimage.ptr(row);

獲取當前畫素點p(row,col)的畫素值p(row,col)=current[col]

畫素範圍處理saturate_cast

saturate_cast(-100),返回0.

saturate_cast(288),返回255

saturate_cast(100),返回100

這個函式的功能是確保rgb值的範圍在0~255之間

掩膜操作實現影象對比度調整

紅色是中心畫素,從上到下,從左到右對每個畫素做同樣的處理操作,得到最終結果就是對比度提高之後的輸出影象mat物件

矩陣掩膜操作十分簡單,根據掩膜來重新計算每個畫素的畫素值,掩膜(mask也被稱為kernel)

通過掩膜操作實現影象對比度提高。

i(i,j)=5*i(i,j)-[i(i-1,j)+i(i+1,j)+i(i,j-1)+i(i,j+1)]

0 -1 0

-1 5 -1

0 -1 0

#include

#include

#include

using namespace cv;

int main(int argc;char** ar**)

namedwindow("input image",cv_window_autosize);

imshow("input image",src);

//int cols = (src.cols - 1) * src.channels();

int offsetx = src.channels();

int rows = src.rows;

dst = mat::zeros(src.size(),src.type());

for(int row = 1; row < (rows - 1);row++)

}namedwindow("output image",cv_window_autosize);

imshow("output image",dst);

waitkey(0);

return 0;

}opencv自帶函式實現以上功能

函式呼叫filter2d功能

定義掩膜:mat kernel = (mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);

filter2d(src,dst,src.depth(),kernel);其中src與dst是mat型別變數,src.depth()表示位圖深度有32,24,8等。

注意:depth()不知道可以直接寫-1

**片段:(衡量程式執行時間)

mat kernel = (mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);

double t = (double)gettickcount();

filter2d(src,dst,src.depth(),kernel);

double timeconsume = ((double)gettickcount() - 5)/gettickfrequency();

cout<<"built filter2d time passes in seconds"

opencv C 學習筆記

1.opencv實際上是在c 的基礎上增加的庫,本質上還是c 2.mat 乙個類,用來建立物件來儲存影象的資訊 3.namedwindow 新建乙個顯示視窗 5.cout 輸出到工作台 6.image.rows cols 影象的行數 列數 7.waitkey 0 等待使用者按鍵事件 8.median...

學習筆記 OpenCV C (三)

調整影象亮度和對比度 理論畫素變換 點操作 鄰域操作 區域 做影象的卷積,影象特徵提取,影象梯度計算,影象更深入模式匹配,模糊,平滑等 調整影象亮度和對比度屬於畫素變換 點操作 g i,j a f i,j p 其中a 0,p是增益變數 重要api mat new image mat zeros im...

學習筆記 OpenCv C (四)

影象的模糊 模糊原理 smooth blur是影象處理中最簡單和常用的操作之一 使用該操作的原因之一就為了給影象預處理時候減低雜訊 使用smooth blur操作器背後是數學的卷積計算 g i,j 求和 f i k,j i h k,i 通常這些卷積運算元計算都是線性操作,所以有叫線性濾波 假設有6x...