이미지에서 수평선 감지

아마드 무사

문제 : 다음과 같은 많은 이미지가 포함 된 데이터 세트로 작업하고 있습니다.

img2 img1

이제 색상 팔레트가 이미지의 맨 아래 또는 오른쪽에 있도록 이러한 모든 이미지를 가로 또는 세로 방향으로 배치해야합니다. 이것은 단순히 이미지를 회전하여 수행 할 수 있지만 어떤 이미지를 회전해야하고 어떤 이미지를 회전해서는 안되는지를 파악하는 것이 까다로운 부분입니다.

내가 시도한 것 :

이 작업을 수행하는 가장 좋은 방법은 색상 팔레트와 이미지를 구분하는 흰색 선을 감지하는 것입니다. 하단에 팔레트가있는 모든 이미지를 오른쪽에 배치하기로 결정했습니다.

# yes I am mixing between PIL and opencv (I like the PIL resizing more)
# resize image to be 128 by 128 pixels
img = img.resize((128, 128), PIL.Image.BILINEAR)
img = np.array(img)

# perform edge detection, not sure if these are the best parameters for Canny
edges = cv2.Canny(img, 30, 50, 3, apertureSize=3)

has_line = 0

# take numpy slice of the area where the white line usually is 
# (not always exactly in the same spot which probably has to do with the way I resize my image) 
for line in edges[75:80]:

    # check if most of one of the lines contains white pixels
    counts = np.bincount(line)
    if np.argmax(counts) == 255:
        has_line = True

# rotate if we found such a line
if has_line == True:
    s = np.rot90(s)

올바르게 작동하는 예 :

여기에 이미지 설명 입력

잘못 작동하는 예 :

여기에 이미지 설명 입력

이것은 이미지의 98 %에서 작동 할 수 있지만 회전하면 안되는 이미지를 회전하거나 회전해야하는 이미지를 회전하지 않는 경우가 있습니다. 이 작업을 수행하는 더 쉬운 방법이 있거나 더 일관된 더 정교한 방법이 있습니까? 수동으로 할 수 있지만 많은 이미지를 다루고 있습니다. 도움 및 / 또는 의견을 보내 주셔서 감사합니다.

테스트 목적으로 내 코드가 실패하는 이미지는 다음과 같습니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

바르 단 아 가르 왈

You can start by thresholding your image by setting a very high threshold like 250 to take advantage of the property that your lines are white. This will make all the background black. Now create a special horizontal kernel with a shape like (1, 15) and erode your image with it. What this will do is remove the vertical lines from the image and only the horizontal lines will be left.

import cv2
import numpy as np

img = cv2.imread('horizontal2.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 250, 255, cv2.THRESH_BINARY)

kernel_hor = np.ones((1, 15), dtype=np.uint8)
erode = cv2.erode(thresh, kernel_hor)

뒹굴다침식

질문에서 언급했듯이 색상 구개는 오른쪽 또는 아래쪽에만있을 수 있습니다. 따라서 올바른 영역에 몇 개의 윤곽선이 있는지 테스트 할 수 있습니다. 이를 위해 이미지를 반으로 나누고 올바른 부분을 취하십시오. 윤곽선을 찾기 전에 결과를 확장하여 일반 (3, 3)커널 로 모든 간격을 채 웁니다 . cv2.RETR_EXTERNAL윤곽선 찾기를 사용하여 우리가 찾은 수를 계산합니다. 특정 숫자보다 크면 이미지가 올바른면이 위를 향하고 회전 할 필요가 없습니다.

right = erode[:, erode.shape[1]//2:]

kernel = np.ones((3, 3), dtype=np.uint8)
right = cv2.dilate(right, kernel)

cnts, _ = cv2.findContours(right, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if len(cnts) > 3:
    print('No need to rotate')
else:
    print('rotate')
    #ADD YOUR ROTATE CODE HERE

추신 : 당신이 제공 한 4 개의 이미지를 모두 테스트했으며 잘 작동했습니다. 어떤 이미지에서도 작동하지 않는 경우 알려주십시오.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C의 비트 맵 이미지에서 수평선 찾기

분류에서Dev

이미지에서 선 감지 및 분리

분류에서Dev

ARCore 수직 평면 감지

분류에서Dev

이미지에서 등호를 감지 할 수 없습니다.

분류에서Dev

자바에서 이미지를 감지 할 수 없습니다.

분류에서Dev

개체 감지에서 감지 창 병합으로 평균 이동 수행

분류에서Dev

opencv 및 Numpy를 사용하여 이미지에서 평행 사변형 감지

분류에서Dev

그레이 스케일 이미지에서 직선을 감지하는 방법?

분류에서Dev

그레이 스케일 이미지에서 직선을 감지하는 방법?

분류에서Dev

이미지에서 결함이있는 윤곽선 감지 Python OpenCV

분류에서Dev

OpenCV를 사용하여 이미지에서 점선 (깨진) 만 감지

분류에서Dev

MATLAB의 다각형 이미지에서 올바른 수의 CORNER 좌표 감지

분류에서Dev

MATLAB의 다각형 이미지에서 올바른 수의 CORNER 좌표 감지

분류에서Dev

선형 레이아웃에서 이미지 버튼 정렬 및 감싸기

분류에서Dev

이미지가있는 수평 드롭 다운 선택

분류에서Dev

파이썬에서 이미지 품질을 저하시키지 않고 수평선과 수직선을 제거하는 방법

분류에서Dev

tesseract 감지 개선

분류에서Dev

Python에서 이미지의 수평 뒤집기

분류에서Dev

이미지에서 여러 원 감지

분류에서Dev

이미지에서 사각형 감지

분류에서Dev

이미지에서 텍스트 감지

분류에서Dev

이미지에서 텍스처 감지

분류에서Dev

이미지 opencv에서 개체 감지

분류에서Dev

행이 가장 큰 어두운 픽셀 수에 해당하는 이미지에 수평선을 그립니다.

분류에서Dev

이미지 픽셀의 열 또는 행이 선인지 감지

분류에서Dev

수평 이미지 회전

분류에서Dev

OpenCV에서 윤곽선 감지를 사용하여 망막 이미지에서 광학 디스크를 감지합니까?

분류에서Dev

이미지에서 흐림을 감지하고 싶지만 제대로 할 수 없습니다.

분류에서Dev

스크롤에서 이미지를 수평으로 이동 한 다음 중지

Related 관련 기사

  1. 1

    C의 비트 맵 이미지에서 수평선 찾기

  2. 2

    이미지에서 선 감지 및 분리

  3. 3

    ARCore 수직 평면 감지

  4. 4

    이미지에서 등호를 감지 할 수 없습니다.

  5. 5

    자바에서 이미지를 감지 할 수 없습니다.

  6. 6

    개체 감지에서 감지 창 병합으로 평균 이동 수행

  7. 7

    opencv 및 Numpy를 사용하여 이미지에서 평행 사변형 감지

  8. 8

    그레이 스케일 이미지에서 직선을 감지하는 방법?

  9. 9

    그레이 스케일 이미지에서 직선을 감지하는 방법?

  10. 10

    이미지에서 결함이있는 윤곽선 감지 Python OpenCV

  11. 11

    OpenCV를 사용하여 이미지에서 점선 (깨진) 만 감지

  12. 12

    MATLAB의 다각형 이미지에서 올바른 수의 CORNER 좌표 감지

  13. 13

    MATLAB의 다각형 이미지에서 올바른 수의 CORNER 좌표 감지

  14. 14

    선형 레이아웃에서 이미지 버튼 정렬 및 감싸기

  15. 15

    이미지가있는 수평 드롭 다운 선택

  16. 16

    파이썬에서 이미지 품질을 저하시키지 않고 수평선과 수직선을 제거하는 방법

  17. 17

    tesseract 감지 개선

  18. 18

    Python에서 이미지의 수평 뒤집기

  19. 19

    이미지에서 여러 원 감지

  20. 20

    이미지에서 사각형 감지

  21. 21

    이미지에서 텍스트 감지

  22. 22

    이미지에서 텍스처 감지

  23. 23

    이미지 opencv에서 개체 감지

  24. 24

    행이 가장 큰 어두운 픽셀 수에 해당하는 이미지에 수평선을 그립니다.

  25. 25

    이미지 픽셀의 열 또는 행이 선인지 감지

  26. 26

    수평 이미지 회전

  27. 27

    OpenCV에서 윤곽선 감지를 사용하여 망막 이미지에서 광학 디스크를 감지합니까?

  28. 28

    이미지에서 흐림을 감지하고 싶지만 제대로 할 수 없습니다.

  29. 29

    스크롤에서 이미지를 수평으로 이동 한 다음 중지

뜨겁다태그

보관