이미지에서 모든 원 찾기

사용자 1146904

저는 파이썬 및 이미지 처리를 처음 사용합니다. 나는 이미지에서 모든 원을 찾고 그 안에 십자 ( 'X')가 표시된 것을 알아 내고 싶은 취미 프로젝트를 진행 중입니다. 지금까지 원을 찾기 위해 몇 가지 코드를 작성했습니다 (아래). 한 이미지에서 작동하지만 다른 이미지의 모든 원을 인식하지 못합니다. find_circles 알고리즘의 성능을 향상시킬 수있는 방법을 알려주세요.

테스트 이미지 :

테스트 이미지

결과 이미지 :

결과 이미지

import cv2
import cv
import numpy as np
import operator
from PIL import Image

def find_circles(img):
    im_gray = cv2.imread(img, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    (thresh, im_bw) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    img_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]
    cv2.imwrite('img_bw.png',img_bw)
    rows, cols =img_bw.shape
    circles = cv2.HoughCircles(img_bw,cv.CV_HOUGH_GRADIENT,1,rows/32, param1=100,param2=40,minRadius=0,maxRadius=100)
    circles = np.uint16(np.around(circles))
    return circles

def draw_circles(img, circles):
    img = cv2.imread(img,0)
    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
    for i in circles[0,:]:
    # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
        # draw the center of the circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
        cv2.putText(cimg,str(i[0])+str(',')+str(i[1]), (i[0],i[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.4, 255)
    return cimg 

def main():
    img = "query_circle9.png"
    circles = find_circles(img)
    img_circle = draw_circles(img,circles)
    cv2.imwrite('cricle.png',img_circle) 

if __name__=='__main__':
    main()
가벼운 연금술사
#!/usr/bin/env python

import cv2

def draw_circles(img, circles):
    # img = cv2.imread(img,0)
    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
    for i in circles[0,:]:
    # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
        # draw the center of the circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
        cv2.putText(cimg,str(i[0])+str(',')+str(i[1]), (i[0],i[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.4, 255)
    return cimg

def detect_circles(image_path):
    gray = cv2.imread(image_path, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    gray_blur = cv2.medianBlur(gray, 13)  # Remove noise before laplacian
    gray_lap = cv2.Laplacian(gray_blur, cv2.CV_8UC1, ksize=5)
    dilate_lap = cv2.dilate(gray_lap, (3, 3))  # Fill in gaps from blurring. This helps to detect circles with broken edges.
    # Furture remove noise introduced by laplacian. This removes false pos in space between the two groups of circles.
    lap_blur = cv2.bilateralFilter(dilate_lap, 5, 9, 9)
    # Fix the resolution to 16. This helps it find more circles. Also, set distance between circles to 55 by measuring dist in image.
    # Minimum radius and max radius are also set by examining the image.
    circles = cv2.HoughCircles(lap_blur, cv2.cv.CV_HOUGH_GRADIENT, 16, 55, param2=450, minRadius=20, maxRadius=40)
    cimg = draw_circles(gray, circles)
    print("{} circles detected.".format(circles[0].shape[0]))
    # There are some false positives left in the regions containing the numbers.
    # They can be filtered out based on their y-coordinates if your images are aligned to a canonical axis.
    # I'll leave that to you.
    return cimg

결과:

cimg = detect_circles("circles.png")

감지 된 서클

남은 오 탐지가 있습니다. 이미지가 정렬 된 경우 y 좌표를 기준으로 이러한 오 탐지를 필터링 할 수 있습니다. 나는 당신에게 맡길 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

모든 배에 탔던 선원 찾기

분류에서Dev

원 안에있는 모든 점 찾기

분류에서Dev

모든 iPhone 크기 지원

분류에서Dev

셀 이미지에서 타원 찾기

분류에서Dev

SQL에서 특정 직원의 모든 직속 부하 찾기

분류에서Dev

SQL : 특정 요일에 고용 된 모든 직원 찾기

분류에서Dev

BeautifulSoup은 Imgur에서 모든 이미지 링크 찾기

분류에서Dev

모든 데이터 지우기 : 모든 값에서 이미지

분류에서Dev

모든 원격 경로 제공 / 찾기

분류에서Dev

Discord.js에서 역할을 가진 모든 구성원 찾기

분류에서Dev

모든 위치에서 일한 직원을 찾기위한 쿼리

분류에서Dev

미러 베어 원격을 통해 원격에서 모든 분기를 당겨

분류에서Dev

원본 이미지에서 원형 이미지 얻기

분류에서Dev

LWJGL 모든 기능이 지원되지 않음

분류에서Dev

사용자 지정 지표에 대한 지표 이름을 기반으로 모든 차원에서 Cloudwatch 경보

분류에서Dev

SPARQL 쿼리에서 원래 세트의 모든 값을 포함하는 세트 찾기

분류에서Dev

모든 테이블에서 모든 부울 열 찾기

분류에서Dev

Busybox : 전원을 켠 이후에 수정 된 파티션의 모든 파일 찾기

분류에서Dev

ConcurrentQueue에서 모든 것을 원자 적으로 가져 오기

분류에서Dev

동위 원소에서 "모든"섹션을 숨기는 방법

분류에서Dev

Sharepoint 365에서 모든 구성원 목록 가져 오기

분류에서Dev

SQL의 쿼리에서 모든 직원 가져 오기

분류에서Dev

Perl 해시의 한 차원에서 모든 값 가져 오기

분류에서Dev

여러 다차원 배열에서 모든 값 가져 오기

분류에서Dev

Teradata에서 압축되지 않은 모든 테이블 찾기

분류에서Dev

테이블에서 모든 마지막 자식 찾기

분류에서Dev

PHP의 원본 이미지를 제외한 모든 이미지를 폴더에서 삭제

분류에서Dev

뷰에서 모든 detailDislosureButtons 찾기

분류에서Dev

이미지에서 직사각형과 모서리 찾기

Related 관련 기사

  1. 1

    모든 배에 탔던 선원 찾기

  2. 2

    원 안에있는 모든 점 찾기

  3. 3

    모든 iPhone 크기 지원

  4. 4

    셀 이미지에서 타원 찾기

  5. 5

    SQL에서 특정 직원의 모든 직속 부하 찾기

  6. 6

    SQL : 특정 요일에 고용 된 모든 직원 찾기

  7. 7

    BeautifulSoup은 Imgur에서 모든 이미지 링크 찾기

  8. 8

    모든 데이터 지우기 : 모든 값에서 이미지

  9. 9

    모든 원격 경로 제공 / 찾기

  10. 10

    Discord.js에서 역할을 가진 모든 구성원 찾기

  11. 11

    모든 위치에서 일한 직원을 찾기위한 쿼리

  12. 12

    미러 베어 원격을 통해 원격에서 모든 분기를 당겨

  13. 13

    원본 이미지에서 원형 이미지 얻기

  14. 14

    LWJGL 모든 기능이 지원되지 않음

  15. 15

    사용자 지정 지표에 대한 지표 이름을 기반으로 모든 차원에서 Cloudwatch 경보

  16. 16

    SPARQL 쿼리에서 원래 세트의 모든 값을 포함하는 세트 찾기

  17. 17

    모든 테이블에서 모든 부울 열 찾기

  18. 18

    Busybox : 전원을 켠 이후에 수정 된 파티션의 모든 파일 찾기

  19. 19

    ConcurrentQueue에서 모든 것을 원자 적으로 가져 오기

  20. 20

    동위 원소에서 "모든"섹션을 숨기는 방법

  21. 21

    Sharepoint 365에서 모든 구성원 목록 가져 오기

  22. 22

    SQL의 쿼리에서 모든 직원 가져 오기

  23. 23

    Perl 해시의 한 차원에서 모든 값 가져 오기

  24. 24

    여러 다차원 배열에서 모든 값 가져 오기

  25. 25

    Teradata에서 압축되지 않은 모든 테이블 찾기

  26. 26

    테이블에서 모든 마지막 자식 찾기

  27. 27

    PHP의 원본 이미지를 제외한 모든 이미지를 폴더에서 삭제

  28. 28

    뷰에서 모든 detailDislosureButtons 찾기

  29. 29

    이미지에서 직사각형과 모서리 찾기

뜨겁다태그

보관