cvThreshold


看了很多很坑的文章。

 

呵呵噠。而且基本上都是一個地方轉載的,英文翻譯我用你單獨給一個詞條么?就不能負點兒責?

 

cvThreshold(img4, img3, 0, 128, CV_THRESH_OTSU);

過於這個函數搜索的結果,真的是哪哪兒都是同樣的描述,而且根本不是給人寫的。

下面是親測的實驗結果。

/* Applies fixed-level threshold to grayscale image.把固定閾值應用到灰度圖上

   This is a basic operation applied before retrieving contours

在檢索輪廓前這是一個基本操作。

第一個參數表示灰度圖中可以被判定為白色的最低標准,如果灰度圖中的數值大於threshold那么就可以被認定為白色。

max_value決定越過閾值的點的亮度,或者說是從0-255中間挑一個亮度進行顯示。如果是255就是白的。如果是0就是黑的,中間表示不同程度的灰

threshold_type

0是亮度過線的按照max_value進行顯示

1是亮度沒過線的按找到max_value顯示

2是 值大於閾值的話,是閾值,也就是不能最亮按照閾值顯示

3 值大於閾值的話是值,否則是0,也就是限了能通過的最低限,你有多亮,就顯示多亮,就像成績一樣,可以不合格,不合格就悲劇,但是成績合格的話,有多高算多高。不限高分

4高分按0顯示,低分有多低顯示多低。

7 那個參數不是給這個設計的,進去會報錯

CV_THRESH_OTSU  8 進去的話,通過 Otsu 算法自行選擇閾值,此時對於threshold的設定不在起作用。

   */

CVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,

                            double  threshold, double  max_value,

                            int threshold_type );

 

 

#include <cv.h>
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <iostream>//這句代碼出現在第一行會報錯,你信不信!!!

using namespace cv;
using namespace std;

int main()
{
    // 讀入一張圖片(游戲原畫)  
    //Mat img = imread("1.png",1);
    //Mat img2 = cvCreateMat(img.rows, img.cols, CV_8UC1);

    //IplImage * img = cvLoadImage("1.png");
    IplImage *img = cvLoadImage("lena.jpg");
    IplImage * img2 = cvCreateImage(cvSize(img->width,img->height), 8, 1);//
    IplImage * img3 = cvCreateImage(cvSize(img->width, img->height), 8, 1);//
    IplImage * img4 = cvCreateImage(cvSize(img->width, img->height), 8, 1); 

    cvCvtColor(img, img2, CV_BGR2GRAY);//要亮一些
    cvCvtColor(img, img4, CV_RGB2GRAY);
    cvThreshold(img4, img3, 0, 128, CV_THRESH_OTSU);
    cvShowImage("s", img);
    cvShowImage("s2", img2);
    cvShowImage("s3", img3);
    //1.png 165646 
    //1.jpg 9437184
    // 創建一個名為 "游戲原畫"窗口  
    //cout << img->depth << endl;
    //cout << img.elemSize() << endl;
    //cout << img.size().width << endl;
    //cout << img.cols << endl;
    //cout << img.depth() << endl;

    waitKey(0);

}
cvThreshold(img4, img3, 0, 128, CV_THRESH_OTSU);
為了自己能夠跑起來這樣一個函數建議輸入的數值順序是:
100 128 0
然后只更改第一個參數50、150 200
然后基本了解第一個所謂閾值的參數
然后更改第二個參數
50 255
了解第二個參數max_value
第三個是類型。
這個先試0然后試1 然后 條件表達式就能理解了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM