> 백엔드 개발 > 파이썬 튜토리얼 > Python을 사용하여 사진의 모양 인식을 수행하는 방법

Python을 사용하여 사진의 모양 인식을 수행하는 방법

王林
풀어 주다: 2023-08-19 09:53:07
원래의
2914명이 탐색했습니다.

Python을 사용하여 사진의 모양 인식을 수행하는 방법

Python을 사용하여 사진에서 모양 인식을 수행하는 방법

컴퓨터 비전의 급속한 발전으로 사람들은 컴퓨터 프로그램을 사용하여 이미지를 자동으로 분석하고 처리하는 데 점점 더 많은 관심을 기울이고 있습니다. 그 중에서도 영상 속 사물의 형태를 인식하는 것은 중요한 기술이다. 이 기사에서는 샘플 코드와 함께 Python 프로그래밍 언어와 OpenCV 라이브러리를 사용하여 이미지의 모양을 인식하는 방법을 소개합니다.

Python은 배우기 쉽고 사용하기 쉬운 프로그래밍 언어인 반면, OpenCV는 컴퓨터 비전 분야에서 널리 사용되는 오픈 소스 라이브러리로 일련의 이미지 처리 및 이미지 인식 기능을 제공합니다.

먼저 Python 및 OpenCV 라이브러리를 설치해야 합니다. 다음 명령을 통해 Windows 환경에 설치할 수 있습니다.

pip install opencv-python
로그인 후 복사

다음으로 샘플 코드를 이미지 로드, 이미지 처리, 모양 감지 및 모양 인식의 네 단계로 나눕니다. .

1단계: 이미지 로드

처리를 시작하기 전에 처리할 이미지를 로드해야 합니다. OpenCV의 imread() 함수를 사용하여 이미지 파일을 읽을 수 있습니다. imread()函数来读取图像文件:

import cv2

# 加载图像
image = cv2.imread('image.jpg')
로그인 후 복사

第二步:图像处理

为了更好地检测出图像中的形状,我们需要进行一些图像处理操作。首先,我们将把彩色图像转换为灰度图像:

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
로그인 후 복사

然后,我们对灰度图像进行二值化处理,将其转换为黑白图像:

# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
로그인 후 복사

第三步:形状检测

接下来,我们可以使用OpenCV的findContours()函数来检测出图像中的所有轮廓。轮廓是由一系列连续的点构成的曲线,可以描述物体的边缘。

# 查找图像中的轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
로그인 후 복사

第四步:形状识别

最后,我们可以通过检测出的轮廓来识别图像中的形状。在本示例中,我们将检测出的轮廓与预定义的形状进行匹配,并判断形状类型。

for contour in contours:
    # 计算轮廓的周长
    perimeter = cv2.arcLength(contour, True)
    # 仅检测周长大于一定阈值的形状
    if perimeter > 50:
        # 进行多边形拟合
        approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
        # 根据拟合出的多边形边数判断形状类型
        sides = len(approx)
        
        if sides == 3:
            shape = "三角形"
        elif sides == 4:
            shape = "四边形"
        elif sides == 5:
            shape = "五边形"
        else:
            shape = "其他"
            
        # 在图像上标记出形状
        cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
        cv2.putText(image, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)
로그인 후 복사

最后,我们可以通过imshow()函数显示结果图像,以及waitKey()

# 显示结果图像
cv2.imshow("Shapes", image)
cv2.waitKey(0)
로그인 후 복사

2단계: 이미지 처리

이미지의 모양을 더 잘 감지하려면 몇 가지 이미지 처리 작업을 수행해야 합니다. 먼저 컬러 이미지를 회색조로 변환합니다:

import cv2

# 加载图像
image = cv2.imread('image.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 查找图像中的轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    perimeter = cv2.arcLength(contour, True)
    if perimeter > 50:
        approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
        sides = len(approx)
        
        if sides == 3:
            shape = "三角形"
        elif sides == 4:
            shape = "四边形"
        elif sides == 5:
            shape = "五边形"
        else:
            shape = "其他"
            
        cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
        cv2.putText(image, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)

cv2.imshow("Shapes", image)
cv2.waitKey(0)
로그인 후 복사
그런 다음 회색조 이미지를 이진화하여 흑백으로 변환합니다.

rrreee

3단계: 모양 감지

다음으로 OpenCV의 findContours( ) 함수를 사용하여 이미지의 모든 윤곽선을 감지합니다. 윤곽선은 객체의 가장자리를 설명하는 일련의 연속된 점으로 형성된 곡선입니다. 🎜rrreee🎜4단계: 모양 인식🎜🎜마지막으로 감지된 윤곽선을 통해 이미지 속 모양을 식별할 수 있습니다. 이 예에서는 감지된 윤곽을 미리 정의된 모양과 일치시키고 모양 유형을 결정합니다. 🎜rrreee🎜마지막으로 imshow() 함수를 통해 결과 이미지를 표시할 수 있으며, waitKey() 함수는 창을 계속 표시하기 위해 키보드 입력을 기다립니다. 🎜rrreee 🎜요약🎜🎜 이 글에서는 Python과 OpenCV 라이브러리를 사용하여 이미지의 모양 인식을 수행하는 방법을 설명합니다. 이미지 로딩, 이미지 처리, 형상 검출, 형상 인식의 4단계를 거쳐 간단한 코드 작성만으로 이미지 속 형상 인식을 구현할 수 있습니다. 이 방법은 컴퓨터 비전 및 이미지 처리에 종사하는 개발자에게 매우 유용하며 산업 자동화, 로봇 비전, 지능형 모니터링 및 기타 분야와 같은 다양한 시나리오에 적용될 수 있습니다. 🎜🎜코드 예: 🎜rrreee🎜이 기사가 이미지 모양 인식에 Python 및 OpenCV를 사용하는 방법에 대해 자세히 배우는 데 도움이 되기를 바랍니다. 이러한 기술을 심층적으로 학습하고 탐구함으로써 자신의 프로젝트에 적용하여 더 많은 기능과 응용 프로그램을 구현할 수 있습니다. 🎜

위 내용은 Python을 사용하여 사진의 모양 인식을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿