opencv阈值分割类型
生活随笔
收集整理的這篇文章主要介紹了
opencv阈值分割类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type);
src:輸入圖,只能輸入單通道圖像,通常來說為灰度圖
dst:輸出圖,一般為二值圖像
thresh:閾值
maxval:當像素值超過了閾值(或者小于閾值,根據type來決定)所賦予的值
type:二值化操作的類型,包含以下5種類型
閾值分割類型
THRESH_BINARY = 0, // 大于thresh 為 maxval,否則為 0
THRESH_BINARY_INV = 1,// 大于thresh 為 0,否則為 maxval
THRESH_TRUNC = 2, // 大于thresh 為 thresh,否則為 0
THRESH_TOZERO = 3, // 大于thresh ?不變,否則為 0
THRESH_TOZERO_INV = 4, // 大于thresh 為 0,否則 不變
程序
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;//全局變量
Mat dst, dst1, dst2;
//載入原圖
Mat src = imread("12.bmp", 1);
int method=1;
int thresh=100;
void on_change(int, void*)
{dst = Mat::zeros(src.size(), src.type());threshold(src, dst, thresh, 255, method);imshow("【原始圖像】", src);imshow("【二值圖像】", dst);
}void print()
{cout << "閾值分割類型:" << endl;cout << "THRESH_BINARY = 0, // 大于thresh 為 maxval,否則為 0" << endl;cout << "THRESH_BINARY_INV = 1,// 大于thresh 為 0,否則為 maxval" << endl;cout << "THRESH_TRUNC = 2, // 大于thresh 為 thresh,否則為 0" << endl;cout << "THRESH_TOZERO = 3, // 大于thresh ?不變,否則為 0" << endl;cout << "THRESH_TOZERO_INV = 4, // 大于thresh 為 0,否則 不變" << endl;
}int main()
{print();//改變console(控制臺)字體顏色 system("color 0B");//判斷圖片是否讀入if (!src.data){ printf("讀取圖片image0錯誤~! \n"); return false; }//將圖片轉為灰度圖cvtColor(src, src, COLOR_BGR2GRAY);//先顯示原圖namedWindow("【原始圖像】");imshow("【原始圖像】", src);//循環輪詢按鍵while (1){//獲取鍵盤按鍵int c = waitKey(0);//判斷ESC是否按下,若按下便退出if ((c & 255) == 27){cout << "程序退出!\n";break;}createTrackbar("【閾值】", "【原始圖像】", &thresh,255, on_change);createTrackbar("【閾值分割類型】", "【原始圖像】", &method, 4, on_change);on_change(0, 0);}return 0;
}
?
?
總結
以上是生活随笔為你收集整理的opencv阈值分割类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像金字塔与resize函数
- 下一篇: opencv函数copyto的用法