opencv python 통계 및 직사 도 그리 기 방법

그 레이스 케 일 직사 도 는 이미지 의 그 레이스 케 일 급 정 보 를 요약 한다.쉽게 말 하면 모든 그 레이스 케 일 급 이미지 의 픽 셀 갯 수 와 점유 율 이다.직사 도 를 만 드 는 데 두 가지 절차 밖 에 없 으 며 직사 도 데 이 터 를 통계 한 다음 에 그림 갤러리 로 직사 도 를 그린다.
통계 직사 도 데이터
우선 함수 와 관련 된 용 어 를 조금 이해 하고 python 3 라 이브 러 리 에서 의 응용 과 처 리 를 이해 해 야 합 니 다.
BINS:위의 직사 도 에서 픽 셀 값 이 0 에서 255 이면 256 개의 값 으로 직사 도 를 표시 해 야 합 니 다.그러나 각 픽 셀 값 의 픽 셀 수 를 알 필요 가 없다 면 두 픽 셀 값 사이 의 픽 셀 수 만 알 고 싶다 면 어떻게 합 니까?예 를 들 어 픽 셀 값 이 0 에서 15 사이 의 픽 셀 점 수 를 알 고 싶 습 니 다.그 다음 에 16 에서 31...240 에서 255.256 개의 값 을 16 부 로 나 누 어 각각 계산 을 종합 할 수 있다.각 조 가 나 뉘 어 진 그룹 은 하나의 BIN 이다.opencv 에서 histSize 를 사용 하여 BINS 를 표시 합 니 다.
DIMS:데이터 의 매개 변수 수 입 니 다.현재 예 에서 수 집 된 데 이 터 는 그 레이스 케 일 값 만 고려 하기 때문에 이 값 은 1 입 니 다.
RANGE:그 레이스 케 일 범위,보통[0,256],즉 그 레이스 케 일 모든 수치 범위 입 니 다.
통계 직사 도 역시 두 가지 방법 이 있 는데 opencv 통계 직사 도 를 사용 하면 함 수 는 다음 과 같다.

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
이 함수 의 매개 변 수 는 상기 용 어 를 이해 하고 자신의 바 이 두 를 더 한 후에 간단하게 응용 할 수 있다.
numpy 통계 함 수 를 사용 하여 주요 응용numpy.histogram()함수(그리고np.bincount()를 사용 합 니 다.아직 시도 하지 않 았 습 니 다.독 자 는 스스로 시도 할 수 있 고 대체적으로 사용 방법 이 같 습 니 다)

hist,bins = np.histogram(img.ravel(),256,[0,256])
opencv 처리 속 도 는 numpy 보다 좋 으 며,동시에 opencv 를 공부 하 는 학생 들 에 게 cv 의 처리 방법 을 많이 활용 하 는 것 은 학습 에 더욱 유리 하 다.
직사 도 를 그리다
직사 도 를 그 리 려 면 보통 Matplotlib 로 그립 니 다.여기 서 matplotlib 의matplotlib.pyplot.hist()함 수 를 제시 해 야 합 니 다.이 함 수 는 중국 측 도 를 직접 통계 적 으로 그 릴 수 있 습 니 다.통계 함 수 는calcHist()또는np.histogram()이다.
이것 은 처리 의 견본 이다.

다음은 코드 구현 입 니 다.

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('/home/yc/Pictures/cat.jpg',0)
plt.hist(img.ravel(),256,[0,256]);
plt.show()
효과.

그 레이스 케 일 직사 도
물론 색채 이미지 검색 과 같은 용법 을 사용 할 때 우리 에 게 필요 한 것 은 BGR 직사 도 이 고 원리 가 유사 하 며 통계 할 때 사용 하 는 것cv2.calcHist()이다.
함수.

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('/home/yc/Pictures/cat.jpg',1)
color = ('b','g','r')
for i,col in enumerate(color):
  histr = cv2.calcHist([img],[i],None,[256],[0,256])
  plt.plot(histr,color = col)
  plt.xlim([0,256])
plt.show()
효 과 는 다음 과 같다.

BGR 직사 도
그 밖 에 원시 적 인 그 레이스 케 일 직사 도 를 계산 하 는 방법 도 소개 합 니 다.

import sys
import numpy as np
import cv2
import matplotlib.pyplot as plt

def main():
  img=cv2.imread('/home/yc/Pictures/cat.jpg',0)
  #           
  xy=xygray(img)  

  #       
  x_range=range(256)
  plt.plot(x_range,xy,"r",linewidth=2,c='black')
  #        
  y_maxValue=np.max(xy)
  plt.axis([0,255,0,y_maxValue])
  #        
  plt.xlabel('gray Level')
  plt.ylabel("number of pixels")
  plt.show()

def xygray(img):
  #     
  rows,cols=img.shape
  #       
  xy=np.zeros([256],np.uint64)
  for r in range(rows):
    for c in range(cols):
      xy[img[r][c]] += 1
  #    ndarry
  return xy

main()
효 과 는 다음 과 같다.

그 레이스 케 일 직사 도
이상 은 본 고의 모든 내용 입 니 다.opencv 를 함께 공부 하 는 친구 들 과 함께 격려 하고 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기