700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python numpy opencv调整图片亮度对比度饱和度

python numpy opencv调整图片亮度对比度饱和度

时间:2019-02-24 20:31:28

相关推荐

python numpy opencv调整图片亮度对比度饱和度

python 调整图片亮度对比度饱和度

安装依赖库亮度变换对比度变换综合调整(完整代码)

(想要完整代码直接划到最后)

原理比较简单,本质上是对图像各个通道的每个像素点做线性变换,对超出范围[0,255]的做截断处理,所以使用numpy处理比较方便

安装依赖库

pip install numpypip install opencv-python

亮度变换

# 修改图像的亮度,brightness取值0~2 <1表示变暗 >1表示变亮def change_brightness(img, brightness):[averB, averG, averR] = np.array(cv2.mean(img))[:-1] / 3k = np.ones((img.shape))k[:, :, 0] *= averBk[:, :, 1] *= averGk[:, :, 2] *= averRimg = img + (brightness - 1) * kimg[img > 255] = 255img[img < 0] = 0return img.astype(np.uint8)

一下函数为了方便展示调用,可自行选择使用

def cvshow(name, img):cv2.namedWindow(name, cv2.WINDOW_NORMAL)cv2.resizeWindow(name,1280,720)cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyWindow(name)

对"sc/1.jpg"应用亮度变换

img = cv2.imread("sc/1.jpg")img = change_brightness(img,2)cv2.imwrite("sc/2.jpg",img)cvshow("change_brightness",img)

应用前

应用后

效果还是比较明显的

对比度变换

# 修改图像的对比度,coefficent>0, <1降低对比度,>1提升对比度 建议0-2def change_contrast(img, coefficent):imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)m = cv2.mean(img)[0]graynew = m + coefficent * (imggray - m)img1 = np.zeros(img.shape, np.float32)k = np.divide(graynew, imggray, out=np.zeros_like(graynew), where=imggray != 0)img1[:, :, 0] = img[:, :, 0] * kimg1[:, :, 1] = img[:, :, 1] * kimg1[:, :, 2] = img[:, :, 2] * kimg1[img1 > 255] = 255img1[img1 < 0] = 0return img1.astype(np.uint8)

对路径"sc/1.jpg"下图片应用对比度变换实例:

img = cv2.imread("sc/1.jpg")img = change_contrast(img,2)cv2.imwrite("sc/2.jpg",img)cvshow("change_brightness",img)

应用前

应用后

综合调整(完整代码)

为了方便使用,我们创建两个滑块对竖直进行控制,而后按s键进行保存

import cv2import numpy as np# 修改图像的对比度,coefficent>0, <1降低对比度,>1提升对比度 建议0-2def change_contrast(img, coefficent):imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)m = cv2.mean(img)[0]graynew = m + coefficent * (imggray - m)img1 = np.zeros(img.shape, np.float32)k = np.divide(graynew, imggray, out=np.zeros_like(graynew), where=imggray != 0)img1[:, :, 0] = img[:, :, 0] * kimg1[:, :, 1] = img[:, :, 1] * kimg1[:, :, 2] = img[:, :, 2] * kimg1[img1 > 255] = 255img1[img1 < 0] = 0return img1.astype(np.uint8)# 修改图像的亮度,brightness取值0~2 <1表示变暗 >1表示变亮def change_brightness(img, brightness):[averB, averG, averR] = np.array(cv2.mean(img))[:-1] / 3k = np.ones((img.shape))k[:, :, 0] *= averBk[:, :, 1] *= averGk[:, :, 2] *= averRimg = img + (brightness - 1) * kimg[img > 255] = 255img[img < 0] = 0return img.astype(np.uint8)def cvshow(name, img):cv2.namedWindow(name, cv2.WINDOW_NORMAL)cv2.resizeWindow(name,1280,720)cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyWindow(name)def demo():# 加载图片 读取彩色图像image = cv2.imread('sc/1.jpg',cv2.IMREAD_COLOR)l = 50c = 50MAX_VALUE = 100# 调节饱和度和亮度的窗口cv2.namedWindow("changImage", cv2.WINDOW_AUTOSIZE)def nothing(*arg):pass# 滑动块cv2.createTrackbar("l", "changImage", l, MAX_VALUE, nothing)cv2.createTrackbar("c", "changImage", c, MAX_VALUE, nothing)while True:# 得到 l、 s 、c的值l = cv2.getTrackbarPos('l', "changImage")c = cv2.getTrackbarPos('c', "changImage")img = np.copy(image.astype(np.float32))# 亮度 -1~1img = change_brightness(img, float(l - 50) / float(50))# 对比度 0~2img = change_contrast(img, c / 50)# 显示调整后的效果img = cv2.resize(img, (1280, 720))cv2.imshow("changImage", img)ch = cv2.waitKey(5)# 按 ESC 键退出if ch == 27:breakelif ch == ord('s'):# 按 s 键保存并退出# 保存结果cv2.imwrite("result.jpg", img)break# 关闭所有的窗口cv2.destroyAllWindows()if __name__ == "__main__":demo()

效果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。