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)
练习题:
-
编写一段程序实现以下功能:
代码调用电脑摄像头,寻找视野中任意颜色(自定)并具有一定大小的物体,并用矩形框处,最后显示在图像上;
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()