《计算机视觉技术与应用》

您所在的位置:网站首页 黑色正方形 《计算机视觉技术与应用》

《计算机视觉技术与应用》

2024-03-16 17:02| 来源: 网络整理| 查看: 265

系列文章目录

《计算机视觉技术与应用》-----第二章 图像处理基础

《计算机视觉技术与应用》-----第三章 图形用户界面

《计算机视觉技术与应用》-----第四章 图像变换

《计算机视觉技术与应用》-----第五章 边缘和轮廓

《计算机视觉技术与应用》-----第六章 边缘和轮廓

《计算机视觉技术与应用》-----第七章 边缘和轮廓

《计算机视觉技术与应用》----- 重点复盘

文章目录 系列文章目录前言一、读取图像二、写图像三、显示图像四、等待按键五、播放视频六 将视频写入文件八 捕获摄像头视频九 操作灰度图像十 操作彩色图像十一 通过数组索引拆分通道十二 使用cv2.split()函数拆分通道十三 合并图像通道十四 图像加法十五 加权加法运算十六 位运算十七 实验一:为人物图像打码十八 创建图像掩膜课后习题总结

前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

提示:以下是本篇文章正文内容,下面案例可供参考

一、读取图像

在这里插入图片描述

#test2-1 读取图像 import cv2 #img = cv2.imread('lena.jpg')#只需要写图片的相对路径 img = cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_GRAYSCALE_4)#只需要写图片的相对路径 print("输出内容:") print(type(img)) print(img)#输出图像数组 print(img.shape)#输出数组形状 print(img.dtype)#输出数组元素的类型 print(img.size)#输出数组元素个数 二、写图像

在这里插入图片描述

#t2-2.py 将图像存入文件 import cv2 import numpy as np img = np.zeros((100,100),dtype=np.uint8)+255#创建大小为100*100的黑色正方形图像 cv2.imwrite('t2-2.jpg',img)#将创建的白色图片命名为t2-2.jpg存入文件中 三、显示图像

在这里插入图片描述

#t2-3.py 显示图像 import cv2 img = cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2)#将读取到图像 #转换为BGR模式,再缩减为原来的1/2 cv2.imshow('lena',img) #显示图像 cv2.waitKey() #等待显示图片 四、等待按键

在这里插入图片描述

#test2-4.py:等待按键 import cv2 img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像,缩小为原来的1/2 cv2.imshow('lena',img) #显示图像 key=0 while key!=27: #按Esc键时终止循环 key=cv2.waitKey() #等待按键 cv2.destroyWindow('lena') #关闭图像窗口 五、播放视频

在这里插入图片描述

#t2-5.py 播放视频 from tkinter import Frame import cv2 vc = cv2.VideoCapture('test2-5.mp4') #创建videoCapture对象 fps = vc.get(cv2.CAP_PROP_FPS) #帧 size = (vc.get(cv2.CAP_PROP_FRAME_HEIGHT), vc.get(cv2.CAP_PROP_FRAME_WIDTH) )#读取视频大小 print('帧率:',fps) print('大小:',size) success,frame = vc.read() #读第一帧 while success: cv2.imshow('test2-5video',frame) #在窗口中显示图片 success,frame = vc.read() #继续下一帧读取 key=cv2.waitKey(25) if key == 27: #ASCII值->ESC break vc.release() #关闭视频 这里要注意一下,不用缩进 六 将视频写入文件 #t2-6.py 将视频写入文件 import cv2 vc = cv2.VideoCapture('test2-5.mp4') #创建VideoCapture对象 fps = vc.get(cv2.CAP_PROP_FPS) #读取视频帧率 size = (int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)), int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))) #读取视频大小 vw = cv2.VideoWriter('t2-6out.avi',cv2.VideoWriter_fourcc('X','V','I','D') ,fps,size) #设置视频解码器格式 success,frame = vc.read() while success: vw.write(frame) #将帧写入文件 success,frame = vc.read() #读取下一帧 vc.release() #关闭视频 八 捕获摄像头视频

在这里插入图片描述

#t2-7.py 将摄像头拍摄的视频保存到文件中 import cv2 vc = cv2.VideoCapture(0) #创建VideoCapture对象,视频流默认(0)是摄像头 fps = 30 #读取视频帧率 size = (int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)), int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))) #设置视频大小 vw = cv2.VideoWriter('t2-7out.avi',cv2.VideoWriter_fourcc('X','V','I','D') ,fps,size) #设置视频解码器格式 success,frame = vc.read() #读第一帧 while success: vw.write(frame) #将帧写入文件 cv2.imshow('MyCamera',frame) #显示帧 key = cv2.waitKey(30) #需要设置一个参数,不然就会卡住 if key == 27: #按ESC结束 break success,frame = vc.read() #读取下一帧 vc.release() #关闭视频 九 操作灰度图像

在这里插入图片描述

#t2-8.py 操作灰度图像 import cv2 import numpy as np img = np.zeros((640,480),dtype=np.uint8) #创建240*320黑色图像 n = 0 while True: cv2.imshow('GrayImg',img) n+=30 img[:,:]=n #更改灰度值 print(img[1,1]) #输出一个灰度值 key = cv2.waitKey(1000) #延迟1S if key == 27: break 十 操作彩色图像

在这里插入图片描述

#test2-9.py:操作彩色图像 #创建一幅彩色图像,图像的上、中、下三个部分依次为蓝色、绿色和红色, #程序每隔1秒钟轮换三个部分的颜色。 import cv2 import numpy img=numpy.zeros((240,320,3),dtype=numpy.uint8) #创建图像 r0=0 r1=1 r2=2 while True: img[:80,:,r0]=255 #通道r0上三分之一颜色值设为255 img[80:160,:,r1]=255 #通道r1中部三分之一颜色值设为255 img[160:,:,r2]=255 #通道r2下三分之一颜色值设为255 cv2.imshow('ColorImg',img) key=cv2.waitKey(1000) #延迟1秒 img[:,:,:]=0 #像素全部置0 t=r0 #轮换通道序号 r0=r1 r1=r2 r2=t if key==27: break #按【Esc】键结束 十一 通过数组索引拆分通道

在这里插入图片描述

#test2-10.py:通过数组索引拆分通道 import cv2 img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像,缩小为原来的1/2 cv2.imshow('lena',img) #显示原图像 b=img[:,:,0] #获得B通道图像 也就是蓝色分量图像; g=img[:,:,1] #获得G通道图像 也就是绿色分量图像; r=img[:,:,2] #获得R通道图像 也就是红色分量图像; cv2.imshow('lena_B',b) #显示B通道图像 cv2.imshow('lena_G',g) #显示G通道图像 cv2.imshow('lena_R',r) #显示R通道图像 cv2.waitKey(0) 十二 使用cv2.split()函数拆分通道

在这里插入图片描述

#test2-11.py:使用cv2.split()函数拆分通道 import cv2 img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像,缩小为原来的1/2 cv2.imshow('lena',img) #显示原图像 b,g,r=cv2.split(img) #按通道拆分图像 cv2.imshow('lena_B',b) #显示B通道图像 cv2.imshow('lena_G',g) #显示G通道图像 cv2.imshow('lena_R',r) #显示R通道图像 cv2.waitKey(0) 十三 合并图像通道

在这里插入图片描述

#test2-12.py:合并图像通道 import cv2 img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2)#读图像,缩小为原来的1/2 cv2.imshow('lena',img) #显示原图像 b,g,r=cv2.split(img) #按通道拆分图像 rgb=cv2.merge([r,g,b]) #按新顺序合并 gbr=cv2.merge([g,b,r]) #按新顺序合并 grb=cv2.merge([g,r,b]) #按新顺序合并 cv2.imshow('lena_RGB',rgb) #显示合并图像 cv2.imshow('lena_GBR',gbr) #显示合并图像 cv2.imshow('lena_GRB',grb) #显示合并图像 cv2.waitKey(0) 十四 图像加法

在这里插入图片描述

#test2-13.py:图像加法运算 import cv2 img1=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像 img2=cv2.imread('opencvlog.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像 img3=img1+img2 #加号 img4=cv2.add(img1,img2) #cv2.add()函数 cv2.imshow('lena',img1) #显示原图像 cv2.imshow('log',img2) #显示原图像 cv2.imshow('lena+log',img3) #显示“+”图像 cv2.imshow('lenaaddlog',img4) #显示add()图像 cv2.waitKey(0) 十五 加权加法运算

在这里插入图片描述

#test2-14.py:图像的加权加法运算 import cv2 img1=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像 img2=cv2.imread('opencvlog.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像 img3=cv2.addWeighted(img1,0.6,img2,0.7,10) cv2.imshow('lena',img1) #显示原图像 cv2.imshow('log',img2) #显示原图像 cv2.imshow('lena+log',img3) #显示addWeighted()图像 cv2.waitKey(0) 十六 位运算

在这里插入图片描述

#test2-15.py:图像位运算 import cv2 src1=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像 src2=cv2.imread('opencvlog.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像 img3=cv2.bitwise_and(src1,src2)#按位与 img4=cv2.bitwise_or(src1,src2)#按位或 img5=cv2.bitwise_not(src1)#按位取反 img6=cv2.bitwise_xor(src1,src2)#按位异或 cv2.imshow('lena',src1) #显示原图像 cv2.imshow('log',src2) #显示原图像 cv2.imshow('lenaandlog',img3) #显示按位与图像 cv2.imshow('lenaorlog',img4) #显示按位或图像 cv2.imshow('lenanotlog',img5) #显示按位取反图像 cv2.imshow('lenaxorlog',img6) #显示按位异或图像 cv2.waitKey(0) 十七 实验一:为人物图像打码

在这里插入图片描述

#test2-16.py:实验1:为人物图像打码 import cv2 src1=cv2.imread('lena.jpg') #读取图像 cv2.imshow('lena',src1) #显示原图像 src1[240:280,230:380]=200 #更改像素,眼部打码 cv2.imshow('dama',src1) #显示打码图像 cv2.waitKey(0) 十八 创建图像掩膜

在这里插入图片描述

#test2-17.py:实验2:创建图像掩模 import cv2 src1=cv2.imread('lena.jpg') #读取图像 src2=cv2.imread('lenamask.jpg')#读取图像 img3=cv2.bitwise_and(src1,src2) #按位与 cv2.imshow('lena',src1) #显示原图像 cv2.imshow('mask',src2) #显示掩模图像 cv2.imshow('done',img3) #显示按位与图像 cv2.waitKey(0) 课后习题

1.习题2-1.py:创建一幅大小为240×320的图像,图像中心是一个大小为100×100的红色正方形,周围是黑色 在这里插入图片描述

import numpy import cv2 img=numpy.zeros((240,320,3),dtype=numpy.uint8) #0-255 img[70:170,110:210,2]=255 #img[:, :, 0] / img[:, :, 1] / img[:, :, 2]:表示图像单个通道的像素 cv2.imshow('xiti2-1',img) cv2.waitKey(0)

2.习题2-2.py:选择一幅彩色图像,完成下列操作: (1)将图像转换为灰度图像显示。 (2)将图像尺寸减小为原来的1/2显示。 在这里插入图片描述

import cv2 img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE) #读取、转换为灰度图像 cv2.imshow('GRAYSCALE',img) #显示灰度图像 img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取、转换原大小1/2 cv2.imshow('COLOR_2',img) #显示缩小的图像 cv2.waitKey(0)

3.习题2-3.py:选择一幅彩色图像,通过像素更改,在图像中显示一个大小为80×100的黑色正方形。 在这里插入图片描述

import cv2 img=cv2.imread('lena.jpg') h,w,s=img.shape h1=int(h/2) w1=int(w/2) img[h1-40:h1+41,w1-50:w1+51,:]=0 cv2.imshow('blacksquare',img) cv2.waitKey(0)

4.习题2-4.py:选择一幅彩色图像,分别显示其B、G、R通道图像。

import cv2 img=cv2.imread('lena.jpg') #读图像 cv2.imshow('lena',img) #显示原图像 b,g,r=cv2.split(img) #按通道拆分图像 cv2.imshow('lena_B',b) #显示B通道图像 cv2.imshow('lena_G',g) #显示G通道图像 cv2.imshow('lena_R',r) #显示R通道图像 cv2.waitKey(0)

在这里插入图片描述

5.习题2-5.py:选择一幅彩色图像,用NumPy数组创建掩模,在图像中心取出大小为80×120的图像。

在这里插入图片描述

import cv2 import numpy src1=cv2.imread('lena.jpg') h,w,s=src1.shape img=numpy.zeros((h,w,s),dtype=numpy.uint8) h1=int(h/2) w1=int(w/2) img[h1-40:h1+41,w1-60:w1+61,:]=255 img2=cv2.bitwise_and(src1,img) cv2.imshow('done',img2) cv2.waitKey(0) 总结

本章重点

“+”和cv2.add()区别是什么?使用**cv2.split()**函数拆分通道。捕获摄像头视频,在VideoCapture对象中,0表示默认摄像头。等待按键函数 cv2.waitKey() K是大写。读取图像函数,注意参数cv2.IMREAD_GRAYSCALE表示将图像转换为单通道灰度图像,cv2.IMREAD_REDUCED_COLOR_2 表示将图像转换为3通道BGR彩色图像,并且图像尺寸减小为1/2。OpenCV默认的图像格式为BGR。使用zeros()函数创建数组,数组元素默认值是0。注意为人物打码和创建掩膜操作。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3