OpenCV(十四)图像阈值
目錄
一、基礎(chǔ)理論
1.二進(jìn)制閾值化
2.反二進(jìn)制閾值化
3.截?cái)嚅撝祷?/p>
4.閾值化為0
5.反閾值化為0
函數(shù)
代碼
效果
參考答案
一、基礎(chǔ)理論
在二維數(shù)字圖像中,其每個(gè)像素點(diǎn)對(duì)應(yīng)了不同的像素值,其像素值各不相同。可以對(duì)像素值特定范圍內(nèi)的圖像圖像進(jìn)行操作,劃分這個(gè)范圍的值就被稱為圖像閾值,它不是一個(gè)固定的量級(jí),是根據(jù)每幅圖像和處理要求動(dòng)態(tài)改變。例如我們可以從圖像中利用閾值分割出我們需要的部分。
例:
??
1.二進(jìn)制閾值化
??
在運(yùn)用二進(jìn)制閾值化操作時(shí),首先指定一個(gè)閾值量即像素的灰度值,遍歷圖像中像素值,大于這個(gè)閾值的像素均設(shè)置為最大像素值(如8位灰度值最大為255),灰度值小于設(shè)定閾值的像素點(diǎn)像素值重新賦值為0.得到如下圖所示圖像,借用二進(jìn)制概念。(超過(guò)該閾值即為1(255),否則為0)
2.反二進(jìn)制閾值化
??
反二進(jìn)制閾值化顧名思義就是與第一個(gè)閾值化類型相反。
與二進(jìn)制閾值化相同的是也要首先指定一個(gè)閾值,不同的是在對(duì)圖像進(jìn)行閾值化操作時(shí)正好與二進(jìn)制閾值化相反,當(dāng)圖像像素點(diǎn)超過(guò)這個(gè)閾值的時(shí)候像素點(diǎn)重新賦值為0,當(dāng)像素值低于該閾值時(shí)即賦值為最大值。(低于該閾值即為1(255),否則為0)
3.截?cái)嚅撝祷?/h2>
根據(jù)給定的像素值閾值,圖像中大于該閾值的像素點(diǎn)被重新設(shè)置為該閾值,而小于該閾值的像素值保持不變。(超過(guò)閾值部分設(shè)置為閾值)
4.閾值化為0
??
與截?cái)嚅撝祷煌?#xff0c;閾值化為0類型像素點(diǎn)的灰度值如果大于該閾值則像素值不變,如果像素點(diǎn)的灰度值小于該閾值,則像素值設(shè)置為0。(不足閾值部分設(shè)置為0)
5.反閾值化為0
??
其原理類似于閾值化為0類型只不過(guò)在對(duì)圖像進(jìn)行操作時(shí)相反,像素值大于該閾值的像素重新賦值為0,而小于該閾值的像素值則保持不變,(超過(guò)閾值部分設(shè)置為0)
函數(shù)
threshold(gray, dst, threshold_value, threshold_max, type);// 閾值 最大值 類型
類型:?
?
代碼
//基本閾值操作
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>using namespace cv;
Mat src, gray, dst;
int threshold_value = 127;
int threshold_max = 255;
int type = 2;
int type_max = 4;
char name[] = "result";
void Callback_Thre(int, void*); //回調(diào)函數(shù)void Image_Init()
{src = imread("Resource/test.jpg");if (!src.data){printf("could not load image...\n");return ;}imshow("原圖", src);cvtColor(src, gray, COLOR_BGR2GRAY);imshow("GRAY", gray);
}int main(int argc, int argv)
{Image_Init();Callback_Thre(0, 0);createTrackbar("threshold value", name, &threshold_value, threshold_max, Callback_Thre);createTrackbar("threshold type", name, &type, type_max, Callback_Thre);waitKey(0);return 0;
}//閾值化實(shí)現(xiàn)函數(shù)
void Callback_Thre(int, void*)
{//閾值化(自主定義閾值)threshold(gray, dst, threshold_value, threshold_max, type);//閾值化(系統(tǒng)幫忙取,大津法OTSU:THRESH_OTSU;三角形閾值法:THRESH_TRIANGLE)//threshold(gray, dst, 0, 255, THRESH_OTSU | type);imshow(name, dst);
}
效果
?
參考答案
https://blog.csdn.net/keith_bb/article/details/54617625
https://blog.csdn.net/zhu_hongji/article/details/81536891
總結(jié)
以上是生活随笔為你收集整理的OpenCV(十四)图像阈值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OpenCV(十二)漫水填充算法
- 下一篇: C语言结束输入(两种方法)