파이썬 이미지 인식 및 절단 테마

두 가지, 하나는 바이두의 API를 사용하는 것입니다, 효과가있을 수 있지만, 하루에 50 번 호출 할 수있는 한계가 보인다
에서 AIP AipImageClassify 가져 오기 
가져 오기 CV2 
"당신의 AK SK APPID" "" "" 
APP_ID = 'X 축' 
API_KEY = 'X 축' 
SECRET_KEY = 'XX' 
클라이언트 = AipImageClassify (APP_ID, API_KEY, SECRET_KEY) 
"" ""이미지를 읽기 " " 
DEF의 get_file_content (적인 filePath) : 
    : 오픈 (적인 filePath, 'RB') FP AS와 
        반환 fp.read () 
이미지 get_file_content = ( 'D : \\ before.jpg') 
" ""옵션 인수 "" " 
= {} 옵션 
"" "" "라는 매개 화상 검출 체와" 
RET = client.objectDetect (화상 옵션) 
인쇄 (RET) # 출력 네 개의 값, 그러나 파이썬과 상이한 
# cv2.rectangle (이미지, 왼쪽 아래, 오른쪽 아래 좌표, 색상,선 두께) 
이미지 cv2.imread = ( 'D : \\ after.jpg') 
cv2.rectangle (이미지 (24, 39) (464, 404), (0, 255, 0), 2)
cv2.imwrite ( 'D : \\ d99.png'이미지)

  OpenCV의 다른 방법을 사용하는 방법이고, https://blog.csdn.net/liqiancao/article/details/55670749

       https://www.cnblogs.com/python-life/articles/8727692.html

       배경 색상 차이가 상대적으로 큰 경우, 효과는 나쁘지 않다

# - * - 코딩 : UTF-8 - * - 

"" " 
저자 : 앨런 
이메일 : [email protected] 
참조하기 : https://blog.csdn.net/liqiancao/article/details/55670749 
참고 : 사용 파이썬 및 OpenCV의 이미지에서 객체를 검출하고, 객체가 삭감 
"" " 

가져 CV2 
오기 NumPy와 같이 NP 

# 1 단계 :로드 포토, 계조 변환 
: 화상 cv2.imread = ( '\\ IMG_20190601_110701.jpg D') 
= 그레이 cv2.cvtColor (화상 cv2.COLOR_BGR2GRAY) 

# 2 단계는 : X가 감산함으로써, X 방향, Y 방향의 기울기를 뺀 후, 소벨 연산자, y 방향의 기울기를 이용하여 계산되며, 높은 수준의 그라데이션 우리 잎 낮은 수직 기울기 및 화상 영역. 
= cv2.Sobel gradX (그레이 cv2.CV_32F, DX는 =. 1의 Dy = 0, ksize = -1) 
레이디 = cv2.Sobel는 (그레이 cv2.CV_32F, DX = 0,의 Dy를 =. 1 ksize = -1) 

상기 X로부터 Y 경사 구배 번호 빼기 
구배 = cv2.subtract (gradX, 레이디)
= cv2.convertScaleAbs 구배 (기울기) 
# 쇼 이미지 
#의 cv2.imshow ( "첫 번째", 그라데이션) 
#의 cv2.waitKey () 

# 3 단계 : 이미지에 노이즈를 제거. 제 1 저역 통과 필터 스무딩 스플래시 화상 이미지의 고주파 노이즈를 평활화하는 데 도움이 될 것 (9 X 커널 9). 
# 대상 저역 통과 필터는 화상의 변화율을 감소시키는 것이다. AS는 주변 화소에 대해 화소마다 교체 의미한다. 이것은 원활하고 해당 영역 상당한 강도 변화를 치환 할 수 있습니다. 
#이어서, 이진화 된 이미지 블러. 모든 화소 그라데이션 이미지 (90)가 0 (흑)로 설정된 값 이하이다. 그렇지 않으면, 픽셀은 255 (흰색)으로 설정된다. 
임계 값 및 이미지 블러 # 
흐리게 = cv2.blur (구배 (. 9 ,. 9)) 
_, cv2.threshold 임계점 = (흐리게, 90, 255, cv2.THRESH_BINARY) 
# 1 화상 표시 
#의 cv2.imshow ( "임계점"을 ) 임계점 
#의 cv2.waitKey () 

#의 STEP4을 : 이미지에서 우리는 쉽게 지역 곤충 다음과 같은 프로그램을 식별 할 수있게, 블랙 예비, 우리는 흰색 채우기에게 이러한 빈을 사용하는 신체 꿀벌의 많은 지역이 있다는 것을 볼 수 위 
가 어떤을 할 필요 #을 동작의 형태 학적 특징. 
커널 = cv2.getStructuringElement (cv2.MORPH_RECT (25 , 25))
= cv2.morphologyEx 청산 (임계점, cv2.MORPH_CLOSE, 커널) 
# 쇼 이미지 
#의 cv2.imshow ( "closed1", 휴일) 
#의 cv2.waitKey () 

#의 5 단계 : 그래프에서 우리는 흰색에 약간의 작은 이미지가있는 것을 발견 방해 반점, 후 곤충 윤곽 감지, 그들은 제거해야합니다. 네 가지 형태의 침식 및 확장을 실행합니다. 
미란 번호의의 확장이와의 시리즈를 수행 
휴관일 = cv2.erode (폐쇄, 없음, 반복이 =. 4) 
휴관일 = cv2.dilate (폐쇄, 없음, 반복 =. 4) 
# 쇼 이미지 
#의 cv2.imshow ( "closed2", 휴일) 
cv2.waitKey 번호 () 

#의 STEP6 : 곤충 프로필 영역을 식별합니다. 
#의 Cv2.findContours () 함수 
# 이미지 즉, 흑백 (되지 계조), 흑백이어야 검색 될 첫번째 파라미터 
후 # 화상 판독 먼저 변환된다 그레이 있도록하며 이진 영상으로 변환, 세 번째 단계에서 우리 cv2.threshold () 함수는 이진도 있었다. 
# 두 번째 매개 변수는 검색 모드의 윤곽을 나타내는 네있다 : 
# 1. cv2.RETR_EXTERNAL 만 외형의 감지 표현한다 
계층 적 관계를 구축하지 않는 윤곽을 감지 # 2 cv2.RETR_LIST을
# 3 cv2.RETR_CCOMP 윤곽은 두 단계, 상기 보어의 정보의 경계 층 외부 경계 위를 확립한다. 객체를 전달 구멍이있는 경우, 객체의 경계는 최고입니다. 
# 4. cv2.RETR_TREE는 계층 적 트리 구조의 프로파일을 구축 할 수 있습니다. 
# 세번째 파라미터가 윤곽의 근사 
모든 윤곽 점은, 화소 위치의 차이의 두 인접한 포인트 (1), 즉 최대 (ABS (X1-X2)을 초과하지 않는 #의 cv2.CHAIN_APPROX_NONE 저장소 , ABS (Y2-Y1) ). 1 == 
, 프로파일 정보를 저장하는, 예를 들면, 직사각형의 프로파일은 단지 4 점 종점 방향의 좌표를두고 수평 방향 # cv2.CHAIN_APPROX_SIMPLE 압축 수직 방향 소자의 대각선 방향 

#의 cv2.findContours ()를 함수 각 프로파일에 대한 해당 속성이 존재 한 프로파일 자체이며, 두 값을 반환한다. 
#의 Cv2.findContours () 함수는 제 목록의 값을 반환리스트 요소는 NumPy와의 ndarray로 표시되는 각 화상의 프로파일이다. 
# 윤곽에 각 지점의 좌표 각 ndarray을 저장합니다. 우리는 목록을 정렬, 프로파일은 우리가 대부분의 곤충 포인트 찾고있는 프로필입니다. 
cv2.findContours에서의 X는 = (closed.copy () cv2.RETR_EXTERNAL는 cv2.CHAIN_APPROX_SIMPLE) 
# 오기 PDB의 
#의 pdb.set_trace () 
_a은, 탄소 나노 튜브는 _B X = 
C는 정렬 (탄소 나노 튜브, cv2.contourArea 키 = = = 후진 ) 진정한 [0]

cv2.drawContours하여 이미지에 그려진 # OpenCV의 개요. 
# 첫번째 파라미터는 어떤 이미지가 그려진 형상에 표시 
# 두번째 파라미터 프로필 자체, 파이썬리스트이며 
,이 -1이면 세번째 파라미터 윤곽 #가있는 프로파일리스트 지정 상기 윤곽 모두 
# 네번째 파라미터는 등고선의 색상 
# 다섯 번째 파라미터는 등고선의 두께 

#의 cv2.minAreaRect () 함수 : 
# 작은 주로 결정된 설정 점을 포함하는 직사각형 영역이 직사각형을 가질 수있다 편향 각은, 이미지의 경계와 평행하지 않을 수있다. 
회전 계산 형상의 가장 큰 바운딩 박스 번호 
RECT = cv2.minAreaRect (C) 
# = RECT cv2.minAreaRect 튜브 (CNT [. 1]) 
박스 = np.int0 (cv2.boxPoints (RECT)) 

# 그리는 바운딩 박스가 상기 arounded 바코드를 검출하고 이미지 표시 
프레임되지 않을 생산 환경 하에서 #의 
#의 cv2.drawContours (화상 [상자] -1, (0, 255, 0) ,. 3) 
#의 cv2.imshow ( "이미지", 이미지) 
# cv2.imwrite ( "contoursImage2.jpg", 이미지) 
#의 cv2.waitKey (0)

# 7 단계 : 자르기. 상자가 녹색 사각형의 네 꼭지점의 좌표에 저장됩니다. 나는도 자르기 곤충 빨간색 사각형 이미지를 누릅니다. 
# 네 정점의 X, 최소값과 최대 값의 y 좌표를 찾는다. 새로운 고성능 이미지 = MAXY-MINY = 폭 맥스-되어 minX. 
XS는 = [I [0]에 대한 I는 상자] 
Ys 일은 = [I [. 1] I 박스에 대한]는 
X1 = 분 (XS) 
X2 = 최대 (XS) 
Y1 = 분 (Ys 일이다) 
Y2 = 최대 (Ys 일이다) 
하이트 = Y2 - Y1 
폭 = X2 - X1의 
cropImg 이미지 = Y1 : 하이트 + Y1, X1 : 폭 X1의 +] 

#보기 이미지 
cv2.imshow ( "cropImg"cropImg) 
cv2.imwrite ( 'D : \\ result.jpg' , cropImg) 
인쇄 ( "DONE") 
cv2.waitKey ()

  



추천

출처www.cnblogs.com/marszhw/p/10963498.html