2016年3月25日 星期五

OpenCV 3.0 Thresh & adaptive Thresh API

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);
 
}





沒有留言:

張貼留言