2015-10-22 33 views
1

我試圖找出OpenCV fitEllipse用法的文檔化方法。瞭解OpenCV fitEllipse方法

這裏可以找到:http://docs.opencv.org/ref/master/de/dc7/fitellipse_8cpp-example.html

的問題是,它適用於一個閾值到圖像的基礎上,滑塊的位置,但與滑塊值,與原始圖像的唯一路線是:

Mat bimage = image> = sliderPos;

然而那>>對我來說沒有意義,在bimage/image上使用imshow顯示它們是平等的。

有人可以解釋發生了什麼嗎? 對不起,如果很明顯。我不是一個優秀的C++程序員(還)。

回答

1

documentation描述它是一個二值化(0或255):

比較:甲cmpop B,A cmpopα,αcmpop A,其中cmpop是>,> =,的 一個==,!=,< =,<。比較的結果是一個8位 單通道掩模,其元素被設置爲255(如果特定 元件或對元件的滿足條件)或0


現在我試圖解釋更多的技術部分的功能被稱爲。 繼example you gave首先我們應該知道的變量類型:

  • imagebimagecv::Mat
  • sliderPosint類型。

爲操作>=功能可以在mat.hpp其間接另一個包括包含被發現。我們正在尋找的功能是:

MatExpr cv::operator>= (const Mat &a, double s) 

matop.cpp它調用:

MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, b); 

,然後調用(行1408):

res = MatExpr(&g_MatOp_Cmp, cmpop, a, b, Mat(), 1, 1); 

這內部的應用的通用操作給定的參數(矩陣a和b在這裏)。結果(因此部分image >= sliderPos)的類型是MatExpr。 最後的Mat bimage以下function叫做:

Mat& cv::Mat::operator= (const MatExpr & expr) 

這設定Mat bimage到所得MatExpr對象的值。

+0

這似乎回答。我必須對它進行測試,因爲我幾乎可以肯定,使用imshow使'bimage'和'image'看起來都一樣。 我已經使用閾值或inRange(我認爲)二進制圖像,但從來沒有看到> =技巧。 我會在測試後給它一個答案。 – SOMN

1

在這一行:

createTrackbar("threshold", "result", &sliderPos, 255, processImage); 

第四參數(255)是最大滑塊值。最低總是0。因此sliderPos將假設值在[0,255]的範圍內。

這條線:

Mat bimage = image >= sliderPos; 

是一個簡單二進制化:bimage是其中每個像素具有值255,如果在image對應值是>=sliderPos,否則爲0的二進制圖像。 這是一樣的:

Mat bimage; 
threshold(image, bimage, sliderPos-1, 255, THRESH_BINARY); 

bimageimage是不同的。 bimage只有0255值,而image可以有[0,255]範圍內的任何值。