python通过获取图片固定位置的颜色坐标,并且通过坐标点颜色填充整张图片代码+注释

先上代码:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import cv2
import os
import numpy as np
import uuid
#coco
#获取图片固定位置的颜色坐标,并且通过坐标点颜色填充整张图片
'''------------------------------------------------第三--------------------------------------------------------'''
# 获取图片坐标bgr值
def get_pix_bgr(image_path: str, x: int, y: int):
    ext = os.path.basename(image_path).strip().split('.')[-1]
    if ext not in ['png', 'jpg']:
        raise Exception('format error')
    img = cv2.imread(image_path)
    px = img[y, x]
    blue = img[y, x, 0]
    green = img[y, x, 1]
    red = img[y, x, 2]
    return blue, green, red
'''-----------------------------------------------第二----------------------------------------------------------'''
# 构建纯色图
def make_one_color_pic(output_dir: str, image_path: str, coordinates: tuple, resolution: tuple):
    blue, green, red = get_pix_bgr(image_path, coordinates[0], coordinates[1])
    img = np.zeros((resolution[1], resolution[0], 3), np.uint8)
    # 创建BGR纯色图
    img[:] = [blue, green, red]
    result_image = os.path.join(output_dir, '{}.jpg'.format(uuid.uuid1().hex))
    cv2.imwrite(result_image, img)
    return result_image
'''------------------------------------------------第一-------------------------------------------------------'''
#获取固定点坐标
def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        xy = "%d,%d" % (x, y)
        print(x,y)
        cv2.circle(img, (x, y), 2, (0, 0, 255))
        cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,1.0, (0,0,255))
        cv2.imshow("image", img)
        #获得图片大小
        wh = img.shape[0:2]
        print(make_one_color_pic('E:/project/Template_detection/Image_preprocessing/', 'E:/project/Template_detection/Image_preprocessing/aniya_bear.jpg', (x, y), (wh[0], wh[1])))

    '''---------------------------------------------开始-------------------------------------------------------------'''
if __name__ == '__main__':
    img = cv2.imread('E:/project/Template_detection/Image_preprocessing/aniya_bear.jpg')
    cv2.namedWindow("image")
    # cv2.setMouseCallback(winname, onMouse, userdata=0)
    # winname: 自定义的窗口名
    # onMouse:鼠标事件的回调函数(在发生鼠标事件时执行)
    # userdata:传递给回调函数的可选参数
    cv2.setMouseCallback("image", on_EVENT_LBUTTONDOWN)
    while (1):
        cv2.imshow("image", img)
        key = cv2.waitKey(5) & 0xFF
        if key == ord('q'):
            break
    cv2.destroyAllWindows()

    #print(make_one_color_pic('E:/project/Template_detection/Image_preprocessing/', 'E:/project/Template_detection/Image_preprocessing/anniya.jpg', (60, 240), (1080, 1920)))

实验图片:

 

 结果展示:

 我选的原图有点大了,可以自己设定图片的大小。

ps:加油加油

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Python中使用OpenCV库进行图像中闭合曲线填充的示例代码注释: ```python import cv2 # 读取图像 img = cv2.imread('image.png') # 创建一个与图像大小相同的掩模,用于填充 mask = np.zeros(img.shape[:2], dtype=np.uint8) # 定义要填充的闭合曲线 contour = np.array([[100, 100], [300, 100], [300, 300], [100, 300]]) # 将曲线转换为包含整数坐标的格式 contour = contour.astype(int) # 在掩模上填充曲线 cv2.drawContours(mask, [contour], 0, (255, 255, 255), -1) # 应用掩模,将填充颜色应用于原始图像 result = cv2.bitwise_and(img, img, mask=mask) # 显示结果 cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 代码解释: 1. 导入`cv2`库。 2. 使用`cv2.imread()`函数读取要处理的图像。 3. 创建一个与图像大小相同的掩模,用于填充。 4. 定义要填充的闭合曲线,这里使用一个简单的矩形。 5. 将曲线转换为包含整数坐标的格式。 6. 在掩模上填充曲线,使用`cv2.drawContours()`函数进行填充。 7. 应用掩模,将填充颜色应用于原始图像,使用`cv2.bitwise_and()`函数进行应用。 8. 显示结果,使用`cv2.imshow()`函数显示结果图像,使用`cv2.waitKey()`等待键盘输入,使用`cv2.destroyAllWindows()`关闭所有窗口。 需要注意的是,如果要填充的曲线不是一个简单的矩形,需要使用更复杂的算法来生成曲线的轮廓。此外,还需要根据实际情况调整填充颜色、线条粗细等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值