判断图像局部过暗_地编开发debug视图,使用opencv2检测图像

判断图像局部过暗_地编开发debug视图,使用opencv2检测图像_第1张图片
https://www.zhihu.com/video/1234144525931171840

判断图像局部过暗_地编开发debug视图,使用opencv2检测图像_第2张图片

判断图像局部过暗_地编开发debug视图,使用opencv2检测图像_第3张图片

直接上图和视频和图吧,UE4里面我是没找到类似这种可以看直方图的,可以看RGB还有照度图,具体作用就是做场景时候有个参考,HDR之前哪里过亮了或者暗了。

使用opencv,还可以再图中绘制出来过亮过暗的区域(我没做,但是思路是检测颜色,默认转HSV然后对超出的RGB进行绘制为否就不绘制,这个判断和思路youtube一抄一大把我就不贴代码了)。

上面括号里说的内容,类似unity的这个,过亮区域会涂一个颜色,这个思路下面补充一下:

判断图像局部过暗_地编开发debug视图,使用opencv2检测图像_第4张图片

补充下思路,首先这个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号更新:

反正就看评论吧。。。。 这个就当瞎折腾玩好了。。。

你可能感兴趣的:(判断图像局部过暗)