2012-08-16 16 views
9

El kenarlarını çıkarmak istiyorum ancak aşağıdaki sonucu elde ediyorum. Düşük ve yüksek eşiği ayarlamayı denedim ama yine de istenen çıktıyı alamıyorum. Kodun ve çıktısının altında yer aldım. Sorun ne görünüyor?OpenCV'nin Canny Kenarı Algılama C++

Bu, aşağıdaki koddan tarafından oluşturulmuş output image'dır.

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

cevap

14

Değişim

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

sorun bu hat

cvtColor(image, gray_image, CV_RGB2GRAY); 

gri ölçekli elin gri arka çok yakın olduğunu gibi görünüyor. Canny'yi renk (renk) üzerine uyguladım çünkü ten rengi yeterince farklı olmalı. Ayrıca, Canny eşikleri biraz delidir. Kabul edilen norm, en yüksek olanın 2x ila 3x alt olması gerektiğidir. 350 biraz fazla ve ana sorunu çözmeye yardımcı olmaz. Oldukça iyi bir kontur

cv :: Canny (resim, hatlarını, 35,90) çıkarabildiği bu eşikleri

Düzenleme

;

Algoritma hakkında teorinin biraz okunması, neler olduğunu ve iyileştirmek için neler yapmanız gerektiğini anlamanıza yardımcı olacaktır. google

üzerine wiki canny Ancak iyileşme yukarıda (eğer 10, daha iyi eşikleri kullanmak sağlanan 350. deneyin (40, 120)) size çok daha iyi sonuçlar verecektir

+0

çok teşekkür ederim! Benny algoritması hakkında daha fazla okuyacağım. –