openCV를 사용하여 이미지에서 숫자를 지우는 방법은 무엇입니까?

Shivampandit

나는 이미지의 원형 부분 안에 놓인 숫자를 제거하려고하는데 숫자는 검정색이며 배경은 빨강, 노랑, 파랑 및 녹색으로 다릅니다.

나는 그 숫자를 제거하기 위해 opencv를 사용하고 있습니다. cv2.inpaint의 도움으로 이미지에서 숫자를 추출하는 마스크를 사용하여 이미지에서 해당 숫자를 제거하려고했습니다. 추가 분석을 위해서는 명확한 이미지가 필요했습니다. 그러나 현재의 접근 방식은 왜곡 된 이미지를 제공하며 숫자는 완전히 제거되지 않습니다.

임계 값을 변경해 보았습니다. 낮추면 녹색과 빨간색과 같은 어두운 음영 영역의 숫자는 무시됩니다.

import cv2
img = cv2.imread('scan_1.jpg')
mask = cv2.threshold(img,50,255,cv2.THRESH_BINARY_INV)[1][:,:,0]
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
dst = cv2.inpaint(img, mask, 5, cv2.INPAINT_TELEA)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('ost_1.jpg',dst)

입력 이미지 : a) scan_1.jpg b) scan_2.jpg

출력 이미지 : a) ost_1.jpg b) ost_2.jpg

예상 이미지 : 서클은 무시할 수 있지만 이와 유사한 것이 필요합니다.

풀다

여기 내 시도가 있습니다. 서클 외부의 텍스트를 보존하는 데 신경 쓰지 않으면 더 나은 / 쉬운 솔루션을 얻을 수 있습니다.

import cv2
import numpy as np 

#  connectivity method used for finding connected components, 4 vs 8
CONNECTIVITY = 4

#  HSV threshold for finding black pixels
H_THRESHOLD = 179
S_THRESHOLD = 255
V_THRESHOLD = 150

#  read image 
img = cv2.imread("a1.jpg")
img_height = img.shape[0]
img_width = img.shape[1]

#  save a copy for creating resulting image
result = img.copy()

#  convert image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#  found the circle in the image
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.7, minDist= 100, param1 = 48, param2 = 100, minRadius=70, maxRadius=100)

#  draw found circle, for visual only
circle_output = img.copy()


#  check if we found exactly 1 circle
num_circles = len(circles)
print("Number of found circles:{}".format(num_circles))
if (num_circles != 1):
    print("invalid number of circles found ({}), should be 1".format(num_circles))
    exit(0)

#  save center position and radius of found circle
circle_x = 0 
circle_y = 0
circle_radius = 0
if circles is not None:
    # convert the (x, y) coordinates and radius of the circles to integers
    circles = np.round(circles[0, :]).astype("int")

    for (x, y, radius) in circles:
        circle_x, circle_y, circle_radius = (x, y, radius)
        cv2.circle(circle_output, (circle_x, circle_y), circle_radius, (255, 0, 0), 4)
        print("circle center:({},{}), radius:{}".format(x,y,radius))


#  keep a median filtered version of image, will be used later
median_filtered = cv2.medianBlur(img, 21)

# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# define range of black color in HSV
lower_val = np.array([0,0,0])
upper_val = np.array([H_THRESHOLD,S_THRESHOLD,V_THRESHOLD])

# Threshold the HSV image to get only black colors
mask = cv2.inRange(hsv, lower_val, upper_val)

#  find connected components
components = cv2.connectedComponentsWithStats(mask, CONNECTIVITY, cv2.CV_32S)

#  apply median filtering to found components
#centers = components[3]
num_components = components[0]
print("Number of found connected components:{}".format(num_components))

labels = components[1]
stats = components[2]
for i in range(1, num_components):
    left = stats[i, cv2.CC_STAT_LEFT] - 10
    top = stats[i, cv2.CC_STAT_TOP] - 10
    width = stats[i, cv2.CC_STAT_WIDTH] + 10
    height = stats[i, cv2.CC_STAT_HEIGHT] + 10

    #  iterate each pixel and replace them if 
    #they are inside circle
    for row in range(top, top+height+1):
        for col in range(left, left+width+1):
            dx = col - circle_x
            dy = row - circle_y
            if (dx*dx + dy*dy <= circle_radius * circle_radius):
                result[row, col] = median_filtered[row, col]

#  smooth the image, may be necessary?
#result = cv2.blur(result, (3,3))


# display image(s)
cv2.imshow("img", img)
cv2.imshow("gray", gray)
cv2.imshow("found circle:", circle_output)
cv2.imshow("mask", mask)
cv2.imshow("result", result) 

cv2.waitKey(0)
cv2.destroyAllWindows()

a1의 결과 :
a1에 대한 결과

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

OpenCV 및 C ++를 사용하여 번호판에서 숫자를 감지하는 방법은 무엇입니까?

분류에서Dev

Python에서 OpenCV를 사용하여 이미지를 픽셀 화하는 방법은 무엇입니까?

분류에서Dev

OpenCV를 사용하여 ROS에지도 이미지를 업로드하는 방법은 무엇입니까?

분류에서Dev

C를 사용하여 Linux 터미널에서 이전 출력을 지우는 방법은 무엇입니까?

분류에서Dev

사용자가 숫자 입력 상자를 비우는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

openCV에서 이미지를 정규화하는 방법은 무엇입니까?

분류에서Dev

OpenCV에서 하나의 이미지에 여러 필터를 적용하는 방법은 무엇입니까?

분류에서Dev

OpenCV에서 두 이미지 사이에 SoftLight 블렌더를 적용하는 방법은 무엇입니까?

분류에서Dev

CSS를 사용하여 div에 맞게 이미지 모서리를 자르는 방법은 무엇입니까?

분류에서Dev

대화 형 도구를 사용하여 MATLAB에서 이미지를 자르는 방법은 무엇입니까?

분류에서Dev

fread를 사용하여 C에서 웹 서버를 사용하여 브라우저에 이미지를 표시하는 방법은 무엇입니까?

분류에서Dev

JavaScript를 사용하여 다른 페이지에서 이미지 src를 얻는 방법은 무엇입니까?

분류에서Dev

파이썬에서 for 루프를 사용하여 이미지를 인쇄하는 방법은 무엇입니까?

분류에서Dev

코로나 / 루아에서 이미지에 숫자를 표시하는 방법은 무엇입니까?

분류에서Dev

OpenCV에서 이미지를 부동 이미지로 변환하는 방법은 무엇입니까?

분류에서Dev

skimage를 사용하여 이미지에 구멍을 완전히 채우는 방법은 무엇입니까?

분류에서Dev

이 PRNG를 사용하여 범위 내에서 숫자를 생성하는 방법은 무엇입니까?

분류에서Dev

OpenCV를 사용하여 SEM 이미지에서 개체를 감지하고 측정 (fitEllipse)하는 방법은 무엇입니까?

분류에서Dev

SDWebImage를 사용하여 JSON에서 UIImageView로 이미지를로드하는 방법은 무엇입니까?

분류에서Dev

nscache를 사용하여 API에서 이미지를 다운로드하는 방법은 무엇입니까?

분류에서Dev

AFNetworking을 사용하여 캐시에서 UIImageView에 이미지를 표시하는 방법은 무엇입니까?

분류에서Dev

여러 이미지 입력에서 Conv2D를 사용하는 방법은 무엇입니까?

분류에서Dev

regsub를 사용하여 Tcl의 문자열에서 숫자를 제거하는 방법은 무엇입니까?

분류에서Dev

OpenCV를 사용하여 이미지의 배경을 제거하는 방법은 무엇입니까?

분류에서Dev

Scala Swing : 마우스를 사용하여 이미지를 이동하는 방법은 무엇입니까?

분류에서Dev

CSS에서 클리핑을 사용하여 두 이미지를 혼합하는 방법은 무엇입니까?

분류에서Dev

Axios를 사용하여 React에서 페이지 미리보기를 만드는 방법은 무엇입니까?

분류에서Dev

MEX를 사용하여 특정 위치에서 이미지를 읽는 방법은 무엇입니까?

분류에서Dev

jQuery를 사용하여 마우스 오버시 이미지를 변경하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    OpenCV 및 C ++를 사용하여 번호판에서 숫자를 감지하는 방법은 무엇입니까?

  2. 2

    Python에서 OpenCV를 사용하여 이미지를 픽셀 화하는 방법은 무엇입니까?

  3. 3

    OpenCV를 사용하여 ROS에지도 이미지를 업로드하는 방법은 무엇입니까?

  4. 4

    C를 사용하여 Linux 터미널에서 이전 출력을 지우는 방법은 무엇입니까?

  5. 5

    사용자가 숫자 입력 상자를 비우는 것을 방지하는 방법은 무엇입니까?

  6. 6

    openCV에서 이미지를 정규화하는 방법은 무엇입니까?

  7. 7

    OpenCV에서 하나의 이미지에 여러 필터를 적용하는 방법은 무엇입니까?

  8. 8

    OpenCV에서 두 이미지 사이에 SoftLight 블렌더를 적용하는 방법은 무엇입니까?

  9. 9

    CSS를 사용하여 div에 맞게 이미지 모서리를 자르는 방법은 무엇입니까?

  10. 10

    대화 형 도구를 사용하여 MATLAB에서 이미지를 자르는 방법은 무엇입니까?

  11. 11

    fread를 사용하여 C에서 웹 서버를 사용하여 브라우저에 이미지를 표시하는 방법은 무엇입니까?

  12. 12

    JavaScript를 사용하여 다른 페이지에서 이미지 src를 얻는 방법은 무엇입니까?

  13. 13

    파이썬에서 for 루프를 사용하여 이미지를 인쇄하는 방법은 무엇입니까?

  14. 14

    코로나 / 루아에서 이미지에 숫자를 표시하는 방법은 무엇입니까?

  15. 15

    OpenCV에서 이미지를 부동 이미지로 변환하는 방법은 무엇입니까?

  16. 16

    skimage를 사용하여 이미지에 구멍을 완전히 채우는 방법은 무엇입니까?

  17. 17

    이 PRNG를 사용하여 범위 내에서 숫자를 생성하는 방법은 무엇입니까?

  18. 18

    OpenCV를 사용하여 SEM 이미지에서 개체를 감지하고 측정 (fitEllipse)하는 방법은 무엇입니까?

  19. 19

    SDWebImage를 사용하여 JSON에서 UIImageView로 이미지를로드하는 방법은 무엇입니까?

  20. 20

    nscache를 사용하여 API에서 이미지를 다운로드하는 방법은 무엇입니까?

  21. 21

    AFNetworking을 사용하여 캐시에서 UIImageView에 이미지를 표시하는 방법은 무엇입니까?

  22. 22

    여러 이미지 입력에서 Conv2D를 사용하는 방법은 무엇입니까?

  23. 23

    regsub를 사용하여 Tcl의 문자열에서 숫자를 제거하는 방법은 무엇입니까?

  24. 24

    OpenCV를 사용하여 이미지의 배경을 제거하는 방법은 무엇입니까?

  25. 25

    Scala Swing : 마우스를 사용하여 이미지를 이동하는 방법은 무엇입니까?

  26. 26

    CSS에서 클리핑을 사용하여 두 이미지를 혼합하는 방법은 무엇입니까?

  27. 27

    Axios를 사용하여 React에서 페이지 미리보기를 만드는 방법은 무엇입니까?

  28. 28

    MEX를 사용하여 특정 위치에서 이미지를 읽는 방법은 무엇입니까?

  29. 29

    jQuery를 사용하여 마우스 오버시 이미지를 변경하는 방법은 무엇입니까?

뜨겁다태그

보관