OpenCV 3.0 閥值 與 自適性閥值
程式原圖:
程式效果:
Thresh
Adaptive thresh
Threshold 的用途,可以把圖片中的顏色一分為二,較暗的像素會變成黑色。
較亮的像素會轉成白色。
在車牌偵測、字型偵測上會常用到。
因為車牌的顏色固定,而且對比大,所以利用這種門閥 API 可以取得滿意的結果。
程式專案檔:門閥範例專案檔 Google 下載空間 (64bit OpenCV 3.0)
程式碼:
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
//golbal variable
#define WINDOW_NAME "Thresh"
int thresholdValue = 100;
int thresholdType = 3;
Mat srcImg, grayImg, dstImg,dstImg_adaptive;
//golbal function
void on_threshold(int, void*);
int main()
{
srcImg = imread("plate.jpg");//only thing you have to do is to change the picture name
imshow("sourceImg", srcImg);
cvtColor(srcImg, grayImg, COLOR_RGB2GRAY);
imshow("grayImg", grayImg);
namedWindow(WINDOW_NAME, WINDOW_AUTOSIZE);
//crate trackbar at here
createTrackbar("Mode", WINDOW_NAME, &thresholdType,5, on_threshold);//select mode
createTrackbar("Variable Value", WINDOW_NAME, &thresholdValue, 255, on_threshold);
on_threshold(0, 0);
//adaptive
adaptiveThreshold(grayImg, dstImg_adaptive, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 111, 2);
imshow("adaptive", dstImg_adaptive);
while (true)
{
int key;
key = waitKey(20);
if (char(key) == 27)
break;
}
return 0;
}
void on_threshold(int, void*)
{
threshold(grayImg, dstImg, thresholdValue, 255, thresholdType);
imshow(WINDOW_NAME, dstImg);
}
沒有留言:
張貼留言