python获取一张图像或者一个视频中某一点的像素坐标及对应的像素值

import cv2
from pylab import *
from PIL import Image
import sys
import copy
user_input = int(input("如果标视频,请输入1 ;如果标图片,请输入2: "))
if user_input==1:
    input_img = input("请输入视频路径:")
else:
    input_img = input("请输入图像路径:")
#例如E:\demo\1.jpg

def rgb2hex(rgb_list):
    #rgb_list = bgr_list[::-1]
    #print(rgb_list)
    res = "#"
    for a in rgb_list:
        a_hex = hex(a)
        if a<16:
            res+="0"
            res+= a_hex[2:]
        else:
            res+= a_hex[2:]
    return res
            
        


def video_flag():
    frame = 0
    cap = cv2.VideoCapture(input_img)
    fps = cap.get(cv2.CAP_PROP_FPS)
    print("fps: ", fps)
    # frame=cv2.imread('E:/temp/vlcsnap-2020-09-11-17h35m32s537.png')

    def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
        if event == cv2.EVENT_LBUTTONDOWN:
            xy = "%d,%d" % (x, y)
            cv2.circle(frame, (x-1, y-1), 1, (255, 0, 0), thickness = -1)
            cv2.putText(frame, xy, (x+10, y+10), cv2.FONT_HERSHEY_PLAIN,
                        3.0, (0,0,0), thickness = 3)
            print("x:{},y:{}".format(x,y))
            bgr_list = frame[y, x]
            rgb_list = bgr_list[::-1]
            print("RGB为: ", rgb_list)
            print("十六进制颜色:", rgb2hex(rgb_list))
            print("--"*20)
            cv2.imshow("video", frame)
    cv2.namedWindow('video', cv2.WINDOW_NORMAL)
    cv2.setMouseCallback("video", on_EVENT_LBUTTONDOWN)

    while(True):
        ret, frame = cap.read()
        cv2.imshow("video", frame)
        c = cv2.waitKey(1)
        if c == 27:
            break
    cap.release()
    cv2.destroyAllWindows()

def image_flag():
    frame = 0
    frame=cv2.imread(input_img)
    

    def on_EVENT_LBUTTONDOWN(event, x+10, y+10, flags, param):
        if event == cv2.EVENT_LBUTTONDOWN:
            xy = "%d,%d" % (x, y)
            cv2.circle(frame, (x-1, y-1), 1, (255, 155, 0), thickness = -1)
            cv2.putText(frame, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
                        3.0, (0,0,0), thickness = 3)
            print("x:{},y:{}".format(x,y))
            bgr_list = frame[y, x]
            rgb_list = bgr_list[::-1]
            print("RGB为: ", rgb_list)
            print("十六进制颜色:", rgb2hex(rgb_list))
            print("--"*20)
            cv2.imshow("video", frame)
    cv2.namedWindow('video', cv2.WINDOW_NORMAL)
    cv2.setMouseCallback("video", on_EVENT_LBUTTONDOWN)


    while(True):
        cv2.imshow("video", frame)
        c = cv2.waitKey(1)
        if c == 27:
            break
    cv2.destroyAllWindows()

if int(user_input) == 1:
    video_flag()
elif int(user_input) == 2:
    image_flag()
else:
    print("输入错误!请输入1或者2!")

在视频或者图片上用鼠标单击,可以或者该点的像素位置和对应的RGB值。

  • 8
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值