今天下午接到学长的消息,说学长的学长要弄这个东西,我尝试做,用时比较久,大部分时间用于读懂到底要干什么啊,从结果来看,本次实验还算成功的,下文介绍代码实现。(第一次发啥也不懂,先试个水,下次发opencv的学习过程)
图片中RGB三个通道不好处理,换成灰度图就只有一个灰度值,做运算都更加容易,所以处理图像的颜色用灰度图更为实用。
本文旨在介绍图片中已经包含了比色卡,通过opencv对比色卡在图片中实际的RGB以及灰度值进行全图的RGB及灰度的修正。
从上往下分别是:原图,修正后的图,比色卡
以下是代码过程:
1.导入库
import cv2 import numpy as np
2.获取比色卡的平均灰度值
# 将图片转化为灰度图 image = cv2.imread("D:/1.jpg",cv2.IMREAD_GRAYSCALE) # 检查图片是否正确加载 if image is None: print("Error: Could not load image.") exit() # 定位比色卡的鸟瞰图 height, width = image.shape pts1 = np.float32([[100,300],[150,300],[100,400],[150,400]]) pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]]) matrix = cv2.getPerspectiveTransform(pts1,pts2) imgOutput = cv2.warpPerspective(image,matrix,(width,height)) # 计算图像中所有像素值的和 pixel_sum = np.sum(image) # 计算图像的总像素数 num_pixels = image.shape[0] * image.shape[1] #计算比色卡的平均灰度 gray = pixel_sum / num_pixels #打印比色卡的平均灰度 print(gray)
其中,pts1是以左上,右上,左下,右下取的点,点的坐标信息可以在“画图”工具中通过移动鼠标至顶点读取左下角的像素坐标获得。
3.对原图进行处理,并打印原图,处理后的图,比色卡(原图中比色卡标准为128)
# 读取彩色图像 image = cv2.imread("D:/1.jpg") # 打印原始图像的形状 print("Original Image Shape:", image.shape) # 得到原图与比色卡在灰度上的差值 add = 128-gray # 加法操作,确保结果在0-255的范围内 image_adjusted = np.clip(image + add, 0, 255).astype(np.uint8) # image_adjusted = cv2.cvtColor(image_adjusted,cv2.COLOR_BGR2GRAY)#将彩图转成灰度图,如果不需要,注释掉就好了 # 打印调整后的图像的形状 print("Adjusted Image Shape:", image_adjusted.shape) # 显示原始图像和调整后的图像(可选) cv2.imshow("normal",imgOutput) cv2.imshow('Original Image', image) cv2.imshow('RGB', image_adjusted) cv2.imwrite(output_path, image_adjusted) cv2.waitKey(0) cv2.destroyAllWindows()
以上就是做了挺久的一个程序,时间太久了使得原本说有报酬的也没了,不过当做一次练习还是比较记忆深刻,希望能够给看到的网友提供帮助,并激励我继续向前学习。共勉。