OpenCV 는 python 을 이용 하여 이미지 의 직사 도 균형 화 를 실현 한다.
직사 도:(1)이미지 에 서로 다른 픽 셀 등급 이 나타 나 는 횟수(2)이미지 에 서로 다른 등급 의 픽 셀 이 총 픽 셀 수 에 대한 비율 을 가지 고 있 습 니 다.
우 리 는
cv2.calcHist
방법 을 사용 하여 직사 도 를 얻 었 다.cv2.calcHist(images, channels, mask, histSize, ranges):
-img:그림-channels:그림 의 채널 을 선택 하 십시오.
-histSize:직사 도 크기
-ranges:직사 도 범위
cv2.minMaxLoc:
직사 도 의 최대 최소 값 과 그들의 색인 을 되 돌려 줍 니 다.
import cv2
import numpy as np
def ImageHist(image, type):
color = (255, 255,255)
windowName = 'Gray'
if type == 1: # B-G-R
color = (255, 0, 0)
windowName = 'B hist'
elif type == 2:
color = (0,255,0)
windowName = 'G hist'
else:
color = (0,0,255)
#
hist = cv2.calcHist([image],[0],None,[256],[0,255])
#
minV,maxV,minL,maxL = cv2.minMaxLoc(hist)
histImg = np.zeros([256,256,3],np.uint8)
#
for h in range(256):
interNormal = int(hist[h] / maxV * 256)
cv2.line(histImg, (h, 256), (h, 256 - interNormal), color)
cv2.imshow(windowName, histImg)
return histImg
img = cv2.imread('img.jpg', 1)
channels = cv2.split(img) # R-G-B
for i in range(3):
ImageHist(channels[i], 1 + i)
cv2.waitKey(0)
2.직사 도 균형 화
회색 이미지 직사 도 균형 화
여기 서 우 리 는 직사 도 균형 화 된 이미 지 를 직접
cv2.equalizeHist
방법 으로 얻 을 수 있다.
import cv2
import numpy as np
img = cv2.imread('img.jpg', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dat = cv2.equalizeHist(gray)
cv2.imshow('gray', gray)a
cv2.imshow('dat', dat)
cv2.waitKey(0)
원본 그림:직사 도 균형 화 된 그림:
컬러 이미지 직사 도 균형 화
컬러 이미 지 는 3 개의 채널 이 있 습 니 다.직사 도 는 단일 채널 의 픽 셀 통 계 를 대상 으로 하기 때문에
cv2.split
방법 으로 이미지 의 색상 통 로 를 분리 하여 각 채널 의 직사 도 를 얻 고 마지막 으로cv2.merge()
방법 으로 직사 도 를 합 쳐 컬러 이미지 의 직사 도 균형 화 를 얻 을 수 있 습 니 다.
import cv2
import numpy as np
img = cv2.imread('img.jpg', 1)
cv2.imshow('img', img)
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
dat = cv2.merge((bH, gH, rH))
cv2.imshow('dat', dat)
cv2.waitKey(0)
D:\Anaconda\lib\site-packagesumpy\_distributor_init.py:32: UserWarning: loaded more than 1 DLL from .libs:D:\Anaconda\lib\site-packagesumpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\lib\site-packagesumpy\.libs\libopenblas.PYQHXLVVQ7VESDPUVUADXEVJOBGHJPAY.gfortran-win_amd64.dll
stacklevel=1)
원본 그림:
직사 도 균형 화 된 그림:
3.소스 코드 는 직사 도 균형 화 를 실현 한다.
다음은 소스 코드 로 직사 도 를 실현 하 겠 습 니 다.
가로 좌 표 는 픽 셀 등급 이 고 세로 좌 표 는 나타 날 확률 입 니 다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('img.jpg', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
count = np.zeros(256, np.float)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
count[int(gray[i, j])] += 1 #
count = count / (img.shape[0] * img.shape[1]) #
x = np.linspace(0,255,256)
plt.bar(x, count,color = 'b')
plt.show()
#
for i in range(1,256):
count[i] += count[i - 1]
#
map1 = count * 255
for i in range(img.shape[0]):
for j in range(img.shape[1]):
p = gray[i, j]
gray[i, j] = map1[p]
cv2.imshow('gray', gray)
cv2.waitKey(0)
직사 각도:직사 도 균형 화 된 그림:
컬러 직사 도 소스 코드
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('img.jpg', 1)
# R-G-B
countb = np.zeros(256, np.float32)
countg = np.zeros(256, np.float32)
countr = np.zeros(256, np.float32)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
(b,g,r) = img[i,j]
b = int(b)
g = int(g)
r = int(r)
countb[b] += 1 #
countg[g] += 1
countr[r] += 1
countb = countb / (img.shape[0] * img.shape[1]) #
countg = countg / (img.shape[0] * img.shape[1])
countr = countr / (img.shape[0] * img.shape[1])
x = np.linspace(0,255,256)
plt.figure()
plt.bar(x, countb,color = 'b')
plt.figure()
plt.bar(x, countg,color = 'g')
plt.figure()
plt.bar(x, countr,color = 'r')
plt.show()
#
for i in range(1,256):
countb[i] += countb[i - 1]
countg[i] += countg[i - 1]
countr[i] += countr[i - 1]
#
mapb = countb * 255
mapg = countg * 255
mapr = countr * 255
dat = np.zeros(img.shape, np.uint8)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
(b,g,r) = img[i, j]
dat[i, j] = (mapb[b],mapg[g],mapr[r])
cv2.imshow('dat', dat)
cv2.waitKey(0)
R-G-B 3 가지 색상 채널 의 직사 도 는 다음 과 같 습 니 다.그림 균형 화 된 결과:
OpenCV 가 python 을 이용 하여 이미지 의 직사 도 균형 화 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 OpenCV 직사 도 균형 화 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 OpenCV 템플릿 프로젝트 만들기・Windows 7 Professional 64bit ・Visual Studio 2017 Version 15.9.14 · OpenCV 3.4.1 OpenCV의 도입 방법 등은 아래를 참조하십시오. Visual Stu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.