Opencv Task02

该代码示例展示了如何利用OpenCV库在摄像头捕获的视频流中检测特定颜色(如黄色)的物体。通过将图像从BGR转换到HSV色彩空间,然后进行阈值处理和形态学操作,找到目标颜色的轮廓,并用矩形框标记出来。此外,还展示了一个视频制作示例,平滑地将一张图片过渡到另一张图片。
摘要由CSDN通过智能技术生成

Opencv Task02

你可以根据像素的行和列的坐标获取他的像素值。对 BGR 图像而言,返回 值为 B,G,R 的值。对灰度图像而言,会返回他的灰度值。

import cv2 as cv
import numpy as np
img=cv.imread('C:\install\pycharm\code\pythonProject4/1.png')  #windows下都是用斜杆隔开,linux下都是用反斜杠/
px=img[100,100]
print(px)
blue=img[100,100,0]
#只获取图像坐标(100,100)B通道的像素值
green=img[100,100,1]
#只获取图像坐标(100,100)G通道的像素值
red=img[100,100,2]
#只获取图像坐标(100,100)R通道的像素值
print(blue)
print(green)
print(red)

练习题

  1. 编写一段程序实现以下功能:

    代码调用电脑摄像头,寻找视野中任意颜色(自定)并具有一定大小的物体,并用矩形框处,最后显示在图像上;

    import cv2 as cv
    import numpy as np
    
    # 读取视频
    capture = cv.VideoCapture(0)
    # capture = cv.VideoCapture(0)
    height = capture.get(cv.CAP_PROP_FRAME_HEIGHT)
    width = capture.get(cv.CAP_PROP_FRAME_WIDTH)
    count = capture.get(cv.CAP_PROP_FRAME_COUNT)
    fps = capture.get(cv.CAP_PROP_FPS)
    print(height, width, count, fps)
    
    
    def process(image, opt=1):
        # RGB转HSV色彩空间
        hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
        # 结构元素
        line = cv.getStructuringElement(cv.MORPH_RECT, (15, 15), (-1, -1))
        # HSV黄色范围
        mask = cv.inRange(hsv, (11, 43, 46), (34, 255, 255))
        # 开操作
        mask = cv.morphologyEx(mask, cv.MORPH_OPEN, line)
    
        # 轮廓提取, 发现最大轮廓
        contours, hierarchy = cv.findContours(mask, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
        for i in contours:
                x, y, w, h = cv.boundingRect(i)  # 将轮廓分解为识别对象的左上角坐标和宽、高
                # 在图像上画上矩形(图片、左上角坐标、右下角坐标、颜色、线条宽度)
                if min(image.shape[0], image.shape[1]) / 10 < min(h, w) \
                        < min(image.shape[0], image.shape[1]) / 1:
                    cv.rectangle(image, (x, y), (x + w, y + h), (0, 255,), 3)
                    # 给识别对象写上标号
                    font = cv.FONT_HERSHEY_SIMPLEX
                    cv.putText(image,'' , (x - 10, y + 10), font, 1, (0, 0, 255), 2)  # 加减10是调整字符位置
        return image
    # 循环处理每一帧
    while(True):
        ret, frame = capture.read()
        if ret is True:
            result = process(frame)
            cv.imshow("result", result)
            c = cv.waitKey(50)
            print(c)
            if c == 27:  #ESC
                break
        else:
            break
    cv.waitKey(0)
    cv.destroyAllWindows()
    
    

在这里插入图片描述

参考:

https://blog.csdn.net/weixin_46490003/article/details/109127736?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-3&spm=1001.2101.3001.4242

https://blog.csdn.net/qq_39071739/article/details/103180699?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

​ 创建一个视频用来演示一幅图如何平滑的转换成另一幅图(使用函数cv.addWeighted)
链接:https://www.bilibili.com/video/BV1Dh411C7fG

import numpy as np
import cv2 as cv

img1=cv.imread('a.jpg')
img2=cv.imread('b.jpg')
img1=cv.resize(img1,(640,480))
img2=cv.resize(img2,(640,480))
fourcc = cv.VideoWriter_fourcc(*'MJPG')
video = cv.VideoWriter('3.avi', fourcc, 30.0, (640, 480))
for i in range(0,101):
    x=i/100
    y=1-x
    dst = cv.addWeighted(img1,x,img2,y,0)
    video.write(dst)
    cv.namedWindow('dst',0)
    cv.imshow('dst',dst)
    cv.waitKey(1)
cv.waitKey(0)
cv.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值