目錄
一、基礎理論
1.二進制閾值化
2.反二進制閾值化
3.截斷閾值化
4.閾值化為0
5.反閾值化為0
函式
代碼
效果
參考答案
一、基礎理論
在二維數字影像中,其每個像素點對應了不同的像素值,其像素值各不相同,可以對像素值特定范圍內的影像影像進行操作,劃分這個范圍的值就被稱為影像閾值,它不是一個固定的量級,是根據每幅影像和處理要求動態改變,例如我們可以從影像中利用閾值分割出我們需要的部分,
例:
1.二進制閾值化
在運用二進制閾值化操作時,首先指定一個閾值量即像素的灰度值,遍歷影像中像素值,大于這個閾值的像素均設定為最大像素值(如8位灰度值最大為255),灰度值小于設定閾值的像素點像素值重新賦值為0.得到如下圖所示影像,借用二進制概念,(超過該閾值即為1(255),否則為0)
2.反二進制閾值化
反二進制閾值化顧名思義就是與第一個閾值化型別相反,
與二進制閾值化相同的是也要首先指定一個閾值,不同的是在對影像進行閾值化操作時正好與二進制閾值化相反,當影像像素點超過這個閾值的時候像素點重新賦值為0,當像素值低于該閾值時即賦值為最大值,(低于該閾值即為1(255),否則為0)
3.截斷閾值化
根據給定的像素值閾值,影像中大于該閾值的像素點被重新設定為該閾值,而小于該閾值的像素值保持不變,(超過閾值部分設定為閾值)
4.閾值化為0
與截斷閾值化不同,閾值化為0型別像素點的灰度值如果大于該閾值則像素值不變,如果像素點的灰度值小于該閾值,則像素值設定為0,(不足閾值部分設定為0)
5.反閾值化為0
其原理類似于閾值化為0型別只不過在對影像進行操作時相反,像素值大于該閾值的像素重新賦值為0,而小于該閾值的像素值則保持不變,(超過閾值部分設定為0)
函式
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*); //回呼函式
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;
}
//閾值化實作函式
void Callback_Thre(int, void*)
{
//閾值化(自主定義閾值)
threshold(gray, dst, threshold_value, threshold_max, type);
//閾值化(系統幫忙取,大津法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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293833.html
標籤:其他
