直接上图和视频和图吧,UE4里面我是没找到类似这种可以看直方图的,可以看RGB还有照度图,具体作用就是做场景时候有个参考,HDR之前哪里过亮了或者暗了。
使用opencv,还可以再图中绘制出来过亮过暗的区域(我没做,但是思路是检测颜色,默认转HSV然后对超出的RGB进行绘制为否就不绘制,这个判断和思路youtube一抄一大把我就不贴代码了)。
上面括号里说的内容,类似unity的这个,过亮区域会涂一个颜色,这个思路下面补充一下:
补充下思路,首先这个rgb是在0-255里的,有一个最低rgb,一个最高rgb,比如红色最低是160-180,用判断,如果高于或者低于就这个颜色x一个数值标记这个mask区域,在opencv很多例子里有。
2020.4.17更新,举例最亮最暗识别区代码,GIF图可能看的不是很清晰:
#亮度的识别区间
light_low = np.array([222,222,222])
light_high = np.array([255,255,255])
lightMask = cv2.inRange(SourceImage,light_low,light_high)
lightOut = cv2.bitwise_and(SourceImage,SourceImage,mask=lightMask)
res = cv2.addWeighted(src1=SourceImage,alpha=1,src2=lightOut,beta=2,gamma=0.22)
最开始的RGB 灰度histogram直接给代码:
import numpy as np
from PIL import ImageGrab
import cv2
import matplotlib.pyplot as plt
#1.2参数用来调整从屏幕左上角的xy偏移值
CaptureSize=(345,75,1495,755)
#绘制RGB
def calcAndDrawHist(image, color):
hist= cv2.calcHist([image], [0], None, [256], [0.0,255.0])
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)
histImg = np.zeros([256,256,3], np.uint8)
hpt = int(0.9* 256);
for h in range(256):
intensity = int(hist[h]*hpt/maxVal)
cv2.line(histImg,(h,256), (h,256-intensity), color)
return histImg
while True:
#捕获原始图像
screen=np.asarray(ImageGrab.grab(bbox=CaptureSize))
#对原始图像颜色空间转换
screen = cv2.cvtColor(screen,cv2.COLOR_BGR2RGB)
#写入文件与显示图像
cv2.imwrite("ImageCache.jpg",screen,[int(cv2.IMWRITE_JPEG_QUALITY), 100])
cv2.imshow("ImageHistogram",screen)
#复制原始图像
original_img = cv2.imread("ImageCache.jpg")
#设置图像的尺寸与cv插值
img = cv2.resize(original_img,None,fx=0.6,fy=0.6,interpolation = cv2.INTER_CUBIC)
#分离通道,进行绘制
b, g, r = cv2.split(img)
#灰度图
gray = cv2.imread("ImageCache.jpg",cv2.IMREAD_GRAYSCALE)
histImgB = calcAndDrawHist(b, [255, 0, 0])
histImgG = calcAndDrawHist(g, [0, 255, 0])
histImgR = calcAndDrawHist(r, [0, 0, 255])
histImgLM = calcAndDrawHist(gray, [128, 128, 128])
#绘制直方图
cv2.imshow("R Channel", histImgR)
cv2.imshow("G Channel", histImgG)
cv2.imshow("B Channel", histImgB)
cv2.imshow("Gray Channel", histImgLM)
if cv2.waitKey(25)==ord("q"):
cv2.destroyAllWindows()
break
5月3号更新:
反正就看评论吧。。。。 这个就当瞎折腾玩好了。。。