原创 16 OpenCV之Soble算子

一、卷積應用-圖像邊緣提取 圖像的高頻分量一般出現在像素值顯著改變的地方,而高頻分量的出現就容易勾畫出圖像的輪廓。在高等數學中我們知道函數變化劇烈其所對應的導數值越大(極大值),所以表示圖像像素值改變最大的一個方法就是求出圖像的

原创 18 OpenCV之Canny邊緣檢測

一、Canny算子 Canny邊緣檢測算法是John F. Canny於1986年開發出來的一個多級邊緣檢測算法,也被很多人認爲是邊緣檢測的最優算法 消除噪聲:使用高斯平滑濾波器卷積降噪 計算梯度幅值和方向 梯度方向近似

原创 19 OpenCV霍夫直線變換HoughLines

一、霍夫變換 霍夫變換是圖像處理中從圖像中識別幾何形狀的基本方法之一,應用很廣泛,也有很多改進算法。主要用來從圖像中分離出具有某種相同特徵的幾何形狀。最基本的霍夫變換是從黑白圖像中檢測直線。在圖像處理中可以通過霍夫變換可以快速的檢

原创 09 OpenCV模糊圖像2(中值濾波與雙邊濾波)

一、中值濾波 統計排序濾波器 中值濾波對椒鹽噪聲有很好的抑制作用 二、雙邊濾波 由於均值濾波是基於平均權重,故其無法克服邊緣像素信息丟失缺陷 高斯模糊克服了該缺陷,但由於沒有考慮像素值的不同,無法完全避免 高斯雙邊模糊是

原创 22 OpenCV直方圖均衡化equalizeHist

一、圖像直方圖Histogram 圖像直方圖,是指對整個圖像像在灰度範圍內的像素值(0~255)統計出現頻率次數,據此生成的直方圖,稱爲圖像直方圖-直方圖。直方圖反映了圖像灰度的分佈情況,是圖像的統計學特徵。 二、直方圖均衡化

原创 01 OpenCV加載、顯示、修改、保存圖片

一、加載圖像 imread imread功能是加載圖像文件爲一個Mat對象,第一個參數表示圖像文件名稱,第二個參數表示加載的圖像是什麼類型,常見的如下: IMREAD_UNCHANGED (<0) 表示加載原圖,不做任何改變 I

原创 05 OpenCV圖像混合

一、圖像線性混合 addWeighted addWeighted(const CvArr *src1, double alpha, const CvArr *src2, double beta, double gamma, CvA

原创 12 OpenCV圖像上採樣pyrUp與下采樣pyrDown

一、圖像金字塔 在進行數字圖像處理時,我們可能會需要將某種尺寸的圖像轉換爲其他尺寸的圖像,這樣會存在放大圖像和縮小圖像兩種可能。 一個圖像金字塔是一系列圖像的集合,所有圖像來源於同一張原始圖像,通過梯次向下採樣獲得,直到達到某個

原创 04 OpenCV圖像操作

一、讀寫圖像 imread 指定加載爲灰度或者RGB圖像 imwrite 保存圖像文件,類型由擴展名決定 二、讀取像素值 讀取GRAY通道圖像的值 uchar intensity = src.at<uchar>(row,

原创 11 OpenCV 形態學操作之開運算、閉運算、形態學梯度、頂帽、黑帽

形態學的主要用途是獲取物體拓撲和結果信息,它通過物體和結構元素的某些運算,得到物體更本質的形態,在圖像處理中的主要應用有: 利用形態學的基本運算對圖像進行觀察和處理,從而達到改善圖像質量的目的 描述和定義圖像的各種幾何參數和特徵

原创 14 OpenCV自定義線性濾波filter2D

一、卷積 卷積是圖像處理中的一個操作,是kernel在圖像的每個像素上的操作,Kernel本質上一個固定大小的矩陣數組,其中心點稱爲錨點(anchor point)。 利用卷積可以模糊圖像、提取邊緣、進行圖像的銳化等。 卷積運算

原创 06 OpenCV調整圖像亮度與對比度

一、原理及相關API dst = alpha*src + beta alpha > 0 控制圖像對比度,beta是增益變量,控制圖像亮度 Mat new_img = Mat::zeros(img.size(),img.type(

原创 23 OpenCV直方圖計算calcHist

一、直方圖 圖像直方圖是基於圖像像素值,其實對圖像梯度、每個像素的角度、等一切圖像的屬性值,我們都可以建立直方圖。直方圖最常見的幾個屬性: dims: 需要統計的特徵的數據 bins:每個特徵空間子區段的數據 range: 每個

原创 02 OpenCV矩陣的掩膜操作

一、獲取圖像像素指針 CV_Assert(mylmage.depth()==CV_8U); Mat.ptr(int i = 0) 能獲取像素矩陣的指針,索引i表示第i行,從0開始計數 const uchar* current =

原创 03 OpenCV之Mat對象

一、Mat對象與IpIImage對象 IpIImage是從2001年OpenCV發佈之後就一直存在的,是C語言風格的數據結構,需要開發者自己分配與管理內存,對於較大的程序,若使用它容易導致內存泄露問題。 Mat對象是OpenCV