簡體   English   中英

OpenCV的C ++ Canny邊緣檢測

[英]OpenCV's Canny Edge Detection in C++

我想提取手的邊緣,但我得到以下結果。 我已經嘗試調整低和高閾值,但我仍然無法獲得所需的輸出。 我在下面列出了代碼及其輸出。 什么似乎是問題?

這是由下面的代碼生成的輸出圖像

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main(){

    cv::Mat image= cv::imread("open_1a.jpg");
    cv::Mat contours;
    cv::Mat gray_image;

    cvtColor( image, gray_image, CV_RGB2GRAY );

    cv::Canny(image,contours,10,350);

    cv::namedWindow("Image");
    cv::imshow("Image",image);

    cv::namedWindow("Gray");
    cv::imshow("Gray",gray_image);

    cv::namedWindow("Canny");
    cv::imshow("Canny",contours);
    cv::waitKey(0);
}

改變這一行

cvtColor( image, gray_image, CV_RGB2GRAY );

std::vector<cv::Mat> channels;
cv::Mat hsv;
cv::cvtColor( image, hsv, CV_RGB2HSV );
cv::split(hsv, channels);
gray_image = channels[0];

問題似乎是你的灰度級手非常接近灰色背景。 我已經在色調(顏色)上應用了Canny,因為膚色應該是充分不同的。

此外,Canny閾值看起來有點瘋狂。 公認的標准是較高的應該是較低的2倍至3倍。 350有點太多了,它無助於解決主要問題。

編輯

通過這些閾值,我能夠提取出相當好的輪廓

CV :: Canny算子(圖像,等高線,35,90);

閱讀一些關於算法的理論將幫助您了解發生了什么以及您應該做些什么來改進。 谷歌上的wiki canny

但是,上面的改進會給你帶來更好的結果(前提是你使用的閾值比10,350更好。試試(40,120))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM