0
我正在將用opencv 1 C API編寫的舊程序遷移到使用C++的opencv2,舊代碼使用'CV_IS_SEQ_CLOSED'來檢查輪廓是否關閉。我googled了很多,但無法找到如何使用opencv2做同樣的事情。那麼是否有一種解決方法來做同樣的事情?在opencv2中'CV_IS_SEQ_CLOSED'的等值是什麼?
我正在將用opencv 1 C API編寫的舊程序遷移到使用C++的opencv2,舊代碼使用'CV_IS_SEQ_CLOSED'來檢查輪廓是否關閉。我googled了很多,但無法找到如何使用opencv2做同樣的事情。那麼是否有一種解決方法來做同樣的事情?在opencv2中'CV_IS_SEQ_CLOSED'的等值是什麼?
不幸的是,cv::findContours()
沒有提供關於它產生的輪廓的開放性或閉合性的信息。另外,關閉的輪廓不保證具有相同的起點和終點。如果生成不近似的輪廓(通過傳遞CV_CHAIN_APPROX_NONE
標誌),然後檢查輪廓的第一個和最後一個點之間的距離小於sqrt(2)
應該足夠了:
// 1.5 is approximately sqrt(2)
bool closed = cv::norm(contour.front() - contour.back()) < 1.5;
我不認爲這是保證使用不同的近似方法。
你最近的輪廓如何?簡單的檢查向量的第一個和最後一個元素是否相等可能就足夠了。 – Aurelius
@Aurelius我使用findContours來獲得輪廓。你的想法聽起來不錯,但是它能保證'閉合輪廓'必須具有第一個和最後一個元素相等嗎? –