2016-06-27 2 views
1

openCV를 사용하여 iOS 용 응용 프로그램을 개발하여 모니터에서 사진을 찍고 곡선을 추출하지만 임계 값 설정 후 이미지에 밝은 영역이있는 경우 완전한 곡선을 얻지는 못하지만 일부 검은 영역밝은 영역으로 이미지를 임계 값으로 설정

Original image

processed image after thresholding

 original = [MAOpenCV cvMatGrayFromUIImage:_sourceImage]; 
     cv::threshold(original, original, 70, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); 

     findContours(original, contours, hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); 

     cv::Mat skel(original.size(), CV_8UC1, cv::Scalar(0)); 

     int idx = 0; 
     for(; idx >= 0; idx = hierarchy[idx][0]) 
     { 
      if (contours[idx].size()>250 && idx>-1){ 
       cv::Scalar color(255,255,255); 
       drawContours(skel, contours, idx, color, CV_FILLED, 8, hierarchy); 
      } 
     } 
     cv::threshold(skel, skel, 100, 255, CV_THRESH_BINARY_INV); 
     cv::erode(skel,skel,cv::Mat(),cv::Point(-1,-1),2); 

있도록 이미지는 예와 같은 일부 밝은 영역이 때 I의 곡선을 추출하는 화상 처리 방법을

012,351,

답변

0

조명이 고르지 않은 배경이있는 경우 먼저 흰색 Top-Hat (또는 here for MatLabhere for OpenCV)을 적용 할 수 있습니다.

Here is the result 내가 3

그런 반경 형 디스크의 구조 요소를 사용하여 가지고, 어떤 임계 값이 작동을 선택하는 방법.

+0

나는 검은 이미지를 얻을 cv :: Size (3,3))); 예를 들어 주시겠습니까? 고마워요 !! –

+0

OpenCV를 사용하지는 않지만 검은 색 모자를 쓰고 있습니다. 흰색 탑햇은 다음과 같습니다. Image - Opening (Image). 이 버전을 사용해보십시오. – FiReTiTi

+0

커널 크기를 16보다 크게 늘린 결과, RECT 요소를 사용하여 –

0

오츠의 임계 값을 사용하기에 충분하지 않습니까? Otsu's thresholding result

코드 조각 : 이력서 :: morphologyEx (imgColor, imgColor2, 이력서 :: MORPH_TOPHAT, 이력서 :: getStructuringElement (CV : MORPH_ELLIPSE :이 코드를 적용 할 때

import cv2 

image = cv2.imread('d:/so.jpg', cv2.IMREAD_GRAYSCALE) 

threshold, thresholded = cv2.threshold(image, 0, 255, type=cv2.THRESH_BINARY + cv2.THRESH_OTSU) 
print(threshold) 

cv2.imshow('so', image); 
cv2.imshow('thresholded', thresholded) 
cv2.waitKey(0) 
+0

나는 이미 오츠를 사용하고 있지만, 커브를 보는 방법은 여전히 ​​밝은 곳에서 시끄 럽다. –

관련 문제