基于python cv 库实现读取图片像素值

--------在日常生活中,我们经常用简单的形容词来描述颜色,比如“红色”、“蓝色”、“绿色”等。然而,这种描述方法对于精确确定颜色是有限的,尤其是在设计、图像处理、Web开发等领域。为了更准确和科学地定义颜色,我们通常采用 RGB 值 来表示颜色。

什么是 RGB 值?

RGB 是指红色(Red)、绿色(Green)和蓝色(Blue)的组合方式,用来表示颜色。RGB 是一种 加色模型,也就是说,通过将红、绿、蓝三种颜色(又称为三原色)以不同的比例混合,可以生成其他颜色。

RGB 值的表示方式通常是通过三个数字来描述:

  • 每个数字的取值范围是从 0255,表示每种颜色的强度。
    • 0 表示该颜色的强度为 0(没有该颜色)。
    • 255 表示该颜色的强度为最大值(完全有该颜色)。

因此,RGB 值通常以 (R, G, B) 的形式出现,其中 RGB 分别代表红色、绿色和蓝色的强度。

例如:

  • (255, 0, 0):纯红色
  • (0, 255, 0):纯绿色
  • (0, 0, 255):纯蓝色
  • (255, 255, 255):白色
  • (0, 0, 0):黑色

RGB 值的含义

  • 红色通道(R):控制红色的强度。
  • 绿色通道(G):控制绿色的强度。
  • 蓝色通道(B):控制蓝色的强度。

通过调整这三种颜色的强度,我们可以得到几乎所有的颜色。例如:

  • (255, 255, 0):红色和绿色的混合,显示为黄色。
  • (255, 165, 0):橙色。
  • (128, 0, 128):紫色。

基于python的cv库的代码实现###

头文件和图片文件的读取

import cv2
import numpy as np

# 加载图片
image_path = r"C:\Users\master\Desktop\1.jpg"#文件路径
img = cv2.imread(image_path)

# 检查图像是否加载成功
if img is None:
    print("无法加载图像,请检查文件路径。")
    exit()

# 获取图片的尺寸(高度, 宽度)
height, width, _ = img.shape

# 计算图片中心坐标
center_x = width // 2
center_y = height // 2

print(f"图像尺寸:{width}x{height}")

通过这部分代码我们可以实现将目标图片保存变量之中

定义一个回调函数获取鼠标的状态,以及像素计算

# 鼠标回调函数,获取鼠标点击位置的像素值
def get_pixel_value(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        if x < width and y < height:  # 确保坐标在图片范围内
            # 将点击位置的坐标转换到以图片中心为原点的坐标系
            x_centered = x - center_x
            y_centered = y - center_y
            color = img[y, x]
            print(f"坐标: ({x_centered}, {-y_centered}) 颜色值: B={color[0]}, G={color[1]}, R={color[2]}")
        else:
            print("点击位置超出了图片范围!")

# 创建一个窗口并绑定鼠标事件
cv2.namedWindow("Image")
cv2.setMouseCallback("Image", get_pixel_value)

功能概述

此代码可让用户点击图像后,获取点击位置的坐标与颜色值,并将坐标原点转换为图像中心,有助于图像分析等任务中相对坐标的应用。

当在图像上左键点击时,get_pixel_value 回调函数被触发,通过 event, x, y 参数获取点击坐标,以 cv2.EVENT_LBUTTONDOWN 检测左键点击。

在回调函数中,对比 x 与图像宽度 widthy 与图像高度 height,超出范围则打印提示:“点击位置超出了图片范围!”

若在有效范围内,将点击坐标转换为相对于图像中心的坐标,x_centered = x - center_xy_centered = y - center_y,因 OpenCV 与数学坐标系原点差异,y_centered 取负值。

color = img[y, x] 获取像素值,OpenCV 图像为 BGR 格式,color[0] 为蓝色通道,color[1] 为绿色通道,color[2] 为红色通道,最后按特定格式打印坐标与颜色值。

使用 cv2.setMouseCallback("Image", get_pixel_value) 将回调函数绑定到 “Image” 窗口,点击图像时触发。

通常与 OpenCV 配合时,用 cv2.imshow() 显示图像,cv2.waitKey() 监听退出事件,虽此代码未包含这部分内容。

运行案例

这是分别点击示例图片不同位置的结果

完整代码

import cv2
import numpy as np

# 加载图片
image_path = r"C:\Users\master\Desktop\1.jpg"
img = cv2.imread(image_path)

# 检查图像是否加载成功
if img is None:
    print("无法加载图像,请检查文件路径。")
    exit()

# 获取图片的尺寸(高度, 宽度)
height, width, _ = img.shape
print(f"图像尺寸:{width}x{height}")

# 计算图片中心坐标
center_x = width // 2
center_y = height // 2

# 鼠标回调函数,获取鼠标点击位置的像素值
def get_pixel_value(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        if x < width and y < height:  # 确保坐标在图片范围内
            # 将点击位置的坐标转换到以图片中心为原点的坐标系
            x_centered = x - center_x
            y_centered = y - center_y
            color = img[y, x]
            print(f"坐标: ({x_centered}, {-y_centered}) 颜色值: B={color[0]}, G={color[1]}, R={color[2]}")
        else:
            print("点击位置超出了图片范围!")

# 创建一个窗口并绑定鼠标事件
cv2.namedWindow("Image")
cv2.setMouseCallback("Image", get_pixel_value)

# 展示图片并等待按键退出
while True:
    cv2.imshow("Image", img)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按 'q' 键退出
        break

cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值