어떻게 파이썬과 OpenCV의를 통해 달성 목표의 수를 모니터링?

오늘날 우리는 수층의 절반 이상이 흑색 인 경우, 그 필터는 오류가 발생 설명되며, 상기 탭 석탄 제조 공장 수층 색을 모니터와 같은 비디오 감시의 효과로 비디오 모니터의 개체 수를 실현 파이썬 + OpenCV의를 사용한다. 뿐만 아니라 물론, 우리는 비디오 이미지 처리 기술에서 찾고 있습니다, 당신은 또한 이와 같은 프로젝트의 다른 부분으로 마이그레이션 할 수 있습니다 것은 단지 예입니다. 우리는 이미지 인식 컴퓨터 비전 작업은 네 가지 범주는 알고 :

.


 

카테고리 -Classification 다음? "무엇"질문을 해결, 즉 그림이나 어떤 범주를 포함하는 비디오 목표 판사를 부여.

-location 위치 다음은? "어디"질문, 즉, 타겟의 위치를 ​​찾아 해결한다.

감지 -Detection는 : 해결 질문, 즉 대상의 위치를 ​​찾아 예 어떤 대상을 알고 "?? 어디 무엇".

분할 -Segmentation 다음 "객체 나 장면에 속하는 각 화소의"문제를 해결하는 경우 (인스턴스 레벨)와 장면 분 할부 (장면 레벨)로 나누어.

위치 결정은 단지 필요가 대상 객체의 수와 상태를 카운트 할 수있는 객체의 위치를 ​​찾을 필요가 없습니다.

화상 분류 이외에, 대물 테스트 인프라 문제의 문제를 해결한다 :

1. 목표는 종종 어떤 방향 이미지에 나타날 수있다;

여러 가지 다른 크기이다가 2. 목표;

3. 타겟 다소 다른 형상의 종류가있을 수있다.

직사각형 상자가 목적을 정의 할 경우, 사각형은 다른 해상도를 가지고있다. 명확성의 목적이 다르기 때문에, 그래서 윈도우 + 생산 비용이 너무 낮 표준화 목적의 이미지 패턴 계획 고전적인 문제 해결 시험 문제를 회전하여. 최근 몇 년 동안, 표적 탐지 알고리즘은 큰 돌파구를 만들었다. 권고 알고리즘은 두 가지로 나눌 수있다, 하나 이단있는 지역 제안 R-CNN의 알고리즘 (R-CNN, 패스트 R-CNN 빠른 R-CNN, 등)에 기반 알고리즘 요구 생성 목표 위치의 후보 프레임을 대상으로하고, 후보 프레임 분류 및 회귀 할. 다른 하나는 CNN은 다른 종류의 목표 위치를 예측 만 다이렉트 컨볼 루션 신경망을 사용 욜로, SSD와 같은 1 단 알고리즘이다. 첫 번째 방법은 약간의 높은 정밀도이지만, 천천히, 그러나 알고리즘의 제 2 유형은 빠르지 만 정확성이 낮아진다. 음, 오늘 우리의 프로젝트와 너무 많은 다양한 알고리즘,하지만 우리의 핵심 주제, 대상 인식의 수를 설명합니다.

그래서 우리는 그것을 달성하는 방법

단지 단어 아래의 프로젝트를 실현하기 위해 시작하는 것보다 더.

관련 라이브러리 첫 수입

import cv2
from PIL import Image
from PIL import ImageDraw,ImageFont
import numpy as np

그럼라는 무화과 3ji.jpg에 나타낸 바와 같이, 배경으로 사용하는, 즉, 필요한 사전 처리 이미지를 같은 방법으로 추출 된 꼭지 유출 물의 일부가 될 필요

그리고 이것은 또한 실제로 가능하지 않으며, 먼저 그레이 스케일 물론 계산 후 가우스 블러 용이성에 화상을 착색 할 필요가 있고, 물기둥 방법의 일부를 결정하여, 차분 영상을 찾기. 시험 2.JPG 픽처

다음과 같이 코드입니다 :

'''3ji是背景图不可换,调试换另一个图片,3ji自己用画图找到水的位置清除掉水柱即可,所以说摄像头不能动'''
firstframe=cv2.imread("3ji.jpg")
firstframe= cv2.cvtColor(firstframe, cv2.COLOR_BGR2GRAY)
firstframe= cv2.GaussianBlur(firstframe, (21, 21), 0)
secondframe0=cv2.imread("2.jpg")
secondframe0= cv2.cvtColor(secondframe0, cv2.COLOR_BGR2GRAY)
secondframe= cv2.GaussianBlur(secondframe0, (21, 21), 0)
frameDelta = cv2.absdiff(firstframe, secondframe)
x,y=frameDelta.shape
print(x,y)

그리고 쉽게 볼 수 물기둥 경계 에지 검출을 통해 찾을 수 있습니다.

#frameDelta和canny一个是区域一个是轮廓
img = cv2.GaussianBlur(frameDelta,(3,3),0)
canny = cv2.Canny(img, 0, 100)

수층의 전체 면적은 변수를 정의 하였다. 가변 수역 SS 배열 위치의 화소 값을 기억

area=0 #6687,总面积
qingarea=0
ss=[]

외곽선을 그리고 가치는 화소 위치 수층 기록

#画轮廓,存储要识别的像素值位置,记录在ss数组中
for i in range(x):
       for j in range(y):
           if any(frameDelta[i,j]!=[0,0,0]):#白色的时候,占位
               ss.append([i,j])

그런 다음 그림을 추가, 원래의 등고선지도 표시를 추가 :

canny0=cv2.add(secondframe0,canny)

크기는 항목 (50)에 의해 임계 값을 디버깅, 픽셀 색상 값 후 결정

#判断水柱颜色,清水占多少像素
for t in ss:
   k,l=t
   area=area+1
   if canny0[k, l] > 50:
       print(canny0[k,l])
       qingarea+=1
接着统计黑色水柱占比率为多少
deta=(qingarea/area)*100
print(qingarea)
pred="清水占比为"+str(deta)+"%"
print(pred)

마지막으로, 출력 화상 결과 :

cv2.imwrite("pred.jpg",canny0)
canny0=cv2.imread("pred.jpg")
img_PIL = Image.fromarray(cv2.cvtColor(canny0, cv2.COLOR_BGR2RGB))
myfont = ImageFont.truetype(r'C:/Windows/Fonts/simfang.ttf', 40)
draw = ImageDraw.Draw(img_PIL)
draw.text((200, 10), pred, font=myfont, fill=(255,23,140))
img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)
cv2.imshow("frame", img_OpenCV)
key = cv2.waitKey(0)

그림과 같이 발표 궁극적 결과 :

물은 96 %를 차지, 또는 더 정확하게

검정 물은 62 %에 물 38 %를 차지하고, 또한 거의 정확하다.

물론, 이것은 지금까지 개체 수에 대한 온라인 없었다 프로젝트의 최소한의 예에서 비록 그렇게 심오한하지, 모니터링,하지만 탐구하는 좋은 방향입니다 수, 사고의 문제이다. 더 단지 지능 광산에 비해, 그것은 또한 농업이나 축산 및 기타 지능형 감시의 스마트 아이디어 측면이 될 수 필요합니다. 물론, 우리는 또한 다시 개정 코드 기반을 개선 할 수 있습니다, 그것은 위의 전체 코드를 부여하고있다. 모바일 인터넷, 휴대 전화 및 다양한 친구를위한 느린 지속적인 개발 플랫폼으로, 광범위한 규모가 크게 확대 범위 내에서 광범위하게 사진을 향상. 서면, 비디오, 비디오 및 다른 방법에 비해 광범위, 판독기를위한 효율적인 방법에 따라 불량한 사람의 리듬에 맞춰 시각 효과 "찍는"널리 보급 사진.

두 사진은 사람들에게 빠른 데이터 기록 및 공유 방법, 대중의 관심에서 보편적으로 광범위하게 사진을 제공하는 경우, 문제는 적절한 후속이다. 설명 글, 사용자는 키워드 검색을 통해 멋진 의지 데이터를 제공 할 수 있으며, 사진 설명, 사용자가 어려운 채택해야 할 때 데이터를 도움이 될 수 사진 인덱스를 찾을 수 있습니다.

과학 기술의 변화는 종종 손에 손을 가서 자신의 견해는 사용자 통증 점에서 다루어 표현, 첨단 기술 아이디어를 개선 할 필요가 이미지 인식이 자연 환경에서 새로운 기술의 등장 이후 특히 중요 해지고있다. 이것은 또한 컴퓨터 비전의 상승 상태를 보여줍니다.

추천

출처www.cnblogs.com/7758520lzy/p/12152184.html