高亮度区域检测(二维通道转三通道)opencv

将一张图中亮度超过128的区域变成红色输出


    def reshape_gray_to_color( img):
    """一个img的shape等于img.shape (319, 460) ,
    将该img的shape变成img.shape (319, 460, 3)"""
        # 创建新的形状(在最后面加入一个“3”以表示三个颜色通道)
        new_shape = img.shape + (3,)

        # 按照新形状创建一个空白数组
        img_reshaped = np.zeros(new_shape, dtype=img.dtype)

        # 将原始图像复制到新数组中对应的位置
        img_reshaped[:, :, 0] = img
        img_reshaped[:, :, 1] = img
        img_reshaped[:, :, 2] = img

        return img_reshaped

    def highlight_bright_pixels(img, brightness_threshold=128):
        """
        将输入图像中亮度大于等于给定值的像素点标记为红色。
        :param img: 输入图像
        :param brightness_threshold: 亮度值阈值,默认为 128。
        :return: 处理后的图像和标记像素数。
        """

        #img = self.reshape_gray_to_color(img) #

        # 将 RGB 图像转换为 HSV 图像
        hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

        # 提取亮度通道
        value_channel = hsv_img[:, :, 2]

        # 比较亮度值与阈值,返回 True/False 数组
        bright_pixels_mask = value_channel >= brightness_threshold

        # 在掩模下将亮度值大于阈值的区域设置成红色
        output_img = img.copy()
        output_img[bright_pixels_mask] = (0, 0, 255)  # 红色

        # 统计红色像素的数量
        num_red_pixels = np.count_nonzero(bright_pixels_mask)

        return output_img, num_red_pixels
#读取一张图片并显示
img = cv2.imread("keng/9_head_filter_old_mask.jpg")
cv2.imshow("image",img)
print("img.shape",img.shape)
img2,a = highlight_bright_pixels(img)
cv2.imshow("image2",img2)
print(a)
cv2.waitKey(0)

你可能感兴趣的:(opencv,计算机视觉,python)