opencv 项目

opencv 使用项目

前言

  • cv2.WINDOW_NORMAL:该窗口是一个可以手动调整大小的正常窗口。如果没有指定这个属性,窗口的大小将被固定。
  • cv2.WINDOW_AUTOSIZE:这是默认值,窗口的大小会根据图像大小自动调整,并且不能手动改变窗口大小。
  • cv2.WINDOW_FREERATIO:图像会被自由缩放,以适应窗口,而不会保持其原始宽高比。
  • cv2.WINDOW_KEEPRATIO:图像会被缩放以适应窗口,同时保持其原始宽高比。
  • cv2.createTrackbar:用法createTrackbar(trackbar,winname,value,count,onChange)
  • cv2.getTrackbarpor:用法getTrackbarpor(trackbarname,winname)
  • cv2.COLOR_BGR2RGB: BGR 到 RGB
  • cv2.COLOR_RGB2BGR: RGB 到 BGR
  • cv2.COLOR_BGR2GRAY: BGR 到 灰度
  • cv2.COLOR_GRAY2BGR: 灰度 到 BGR
  • cv2.COLOR_BGR2HSV: BGR 到 HSV
  • cv2.COLOR_HSV2BGR: HSV 到 BGR
  • cv2.COLOR_BGR2YUV: BGR 到 YUV
  • cv2.COLOR_YUV2BGR: YUV 到 BGR
  • cv2.COLOR_BGR2YCrCb: BGR 到 YCrCb
  • cv2.COLOR_YCrCb2BGR: YCrCb 到 BGR
  • cv2.COLOR_BGR2LAB: BGR 到 CIE Lab
  • cv2.COLOR_LAB2BGR: CIE Lab 到 BGR
  • cv2.COLOR_BGR2LUV: BGR 到 CIE Luv
  • cv2.COLOR_LUV2BGR: CIE Luv 到 BGR
  • cv2.setMouseCallback:用法setMouseCallback(windowName, onMouse, param=None)

照片

函数用法

cv2.namedWindow('窗口名称',定义窗口的属性)

cv2.resizeWindow('窗口名字',定义窗口的宽(列),定义窗口的高(横))

cv2.imread('照片的路径+照片名')

cv2.imshow(窗口名字',读取到的照片)

讲解:导入OpenCv的第三方库,注意在这里的库名为cv2,创建一个窗口来调节大小,可以不用创建,因为cv2.imshow会自动生成一个窗口,之后就读取照片读取后就要显示出来,一定一定要添加等待按键,要不然窗口会立刻关闭,最后就添加一个关闭所有窗口就可以了

import cv2

#创建一个窗口(不用也可以)

cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)

#调节窗口大小(LGQ这个自定义,但一定要相等)宽为680,高为460

cv2.resizeWindow('LGQ',680,460)

#找到照片来读取

img = cv2.imread('照片的路径+照片名')

#用窗口来显示照片(上面没有创建窗口没有影响,自带窗口)

cv2.imshow('LGQ',img)

#添加一个等待按键来关闭窗口

if cv2.waitKey(0):

	cv2.destroyAllWindows()

视频

函数用法

cv2.namedWindow('窗口名称',定义窗口的属性)

cv2.resizeWindow('窗口名字',定义窗口的宽(列),定义窗口的高(横))

cv2.VideoCapture('视频的路径')

cv2.imshow(窗口名字',读取到的照片)

讲解:导入第三方包名为cv2,创建窗口(可以不用创建,因为cv2.imshow会自动生成一个窗口,创建的目的是为了调节大小),然后就捕获视频,要判断是否打开了视频,因为视频是一张张照片通过帧来显示出来的,所有要添加一个循环来读取视频的每一帧、下一帧,读完帧后就要退出循环关闭窗口,如果没有设置到等到读完帧后就要退出循环,看完视频后就会报错,然后就添加显示视频事件,一定一定要添加等待按键,要不然窗口会立刻关闭(参数一定不能是0),显示完后一定要用release()来释放资源,最后就关闭所有窗口

import cv2
	
#创建窗口(可以不用创建)
	
cv2.namedWindow('窗口名称',cv2.WINDOW_NORMAL)
	
#调节窗口大小宽为680,高为460
	
cv2.resizeWindow('和上面一样',680,460)
	
#捕获视频
	
cap = cv2.VideoCapture('视频的路径')
	
while cap.isOpened():
	
#读取视频的下一帧,ret不可以自定义,frame可以
	
	ret,frame = cap.read()
	#判断是否读取到,没有就跳出循环
	if not ret:
		break
	
#来显示视频
	
	cv2.imshow('窗口名称',frame)
	
#添加一个等待键来关闭窗口,当输入q的时候就关闭窗口
	
	if cv2.waitKey(1) == ord('q'):
	
		break
	
#释放资源
	
cap.release()
	
#关闭所有窗口
	
cv2.destroyAllWindows()

打开摄像头

讲解:导入第三方包名为cv2,创建窗口(可以不用创建,因为cv2.imshow会自动生成一个窗口,创建的目的是为了调节大小),然后就捕获摄像头,参数改为0,要判断是否打开了摄像头,添加一个循环来读取摄像头的每一帧、下一帧(和视频的原理差不多),读完帧后就要退出循环关闭窗口,然后就添加显示视频事件,一定一定要添加等待按键,要不然窗口会立刻关闭(参数一定不能是0),显示完后一定要用release()来释放资源,最后就关闭所有窗口

import cv2
#创建窗口
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
#调节窗口大小
cv2.resizeWindow('LGQ',680,480)
#捕获摄像头,为0的时候
sxt=cv2.VideoCapture(0)
#判断是否打开摄像头
if sxt.isOpened():
    print('已打开')
else:
    print("未打开")
while sxt.isOpened():
    #获取摄像头的下一帧
    ret,sz=sxt.read()
    #判断是否获取到下一帧,没有就跳出循环
    if not ret:
        break
        #来显示摄像头画面
    cv2.imshow('LGQ',sz)
    #添加一个等待按键
    key = cv2.waitKey(1)
    #按g的时候就跳出循环关闭窗口
    if key == ord('g'):
        break
#释放资源
sxt.release()
#关闭所有的窗口
cv2.destroyAllWindows()

鼠标控制

讲解:导入OpenCv第三方库,注意在这里的库名为cv2,导入numpy第三方库,并命名为np,创建一个窗口来调节大小,可以不用创建,因为cv2.imshow会自动生成一个窗口,定义一个函数来打印鼠标发生的事件,注意函数里的参数一定是要有5个的,设置鼠标的事件并在窗口响应,生成一张白色的照片(可以不用生成,读取一直自己的照片也可以),添加循环来读取鼠标发生的事件,之后就显示白色的照片出来,一定一定要添加等待按键,要不然窗口会立刻关闭,最后就添加一个关闭所有窗口就可以了

import cv2
import numpy as np
#创建窗口
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
#调节窗口大小
cv2.resizeWindow('LGQ',640,360)
#定义回调函数
def sb(event,x,y,flags,userdata):
    print(event,x,y,flags,userdata)
#设置鼠标的回调函数,并指定到自定义的函数里
cv2.setMouseCallback('LGQ',sb,'123')
#生成一张白色的一张照片
img = np.zeros((360,640,3),np.uint8)
#img = np.zeros(3)
#print(img)
#>>> [0,0,0]
img[:, :, :] = 255
while(1):
    #显示img
    cv2.imshow('LGQ',img)
    #添加等待按键,并且输入q的时候就跳出循环,关闭窗口
    if cv2.waitKey(1) == ord('q'):
        break
#关闭所有的窗口
cv2.destroyAllWindows()

颜色空间转换

import cv2
import cv2
def callback(value):
    pass
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
cv2.resizeWindow('LGQ',640,480)
#读取照片
img = cv2.imread('./01.jpeg')
#定义空间颜色转化列表
color = [
    cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,
    cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV,
    cv2.COLOR_BGR2YUV
]
#设置trackbar
cv2.createTrackbar('L','LGQ',0,4,callback)
while (1):
    #获取trackbar的值
    index = cv2.getTrackbarPos('L','LGQ')
    img_color = cv2.cvtColor(img,color[index])
    cv2.imshow('LGQ',img_color)
    if cv2.waitKey(1) == ord('q'):
        break
cv2.destroyAllWindows()




颜色通道分离和融合

import cv2
import numpy as np
#创建黑色图片
img = np.zeros((200,300,3),np.uint8)
# print(img)
#分离
b,g,r =cv2.split(img)
# print(g)
b[10:100,10:100]=255
g[10:100,10:100]=255
#融合
img2 = cv2.merge((b,g,r))
cv2.imshow('LGQ',np.hstack((b,g)))
cv2.imshow('LGQ1',np.hstack((img,img2)))
cv2.waitKey(0)
cv2.destroyAllWindows()


照片的属性

import cv2
img = cv2.imread('01.jpeg')
#图片元素多小
print(img.size)
#访问的是高度、长度、通道数
print(img.shape)
#图像元素占用的内存大小
print(img.dtype)

照片的加减乘除

import cv2
img = cv2.imread('./01.jpeg')
img2 = cv2.imread('./02.jpg')
print(img.shape)
print(img2.shape)
img_now = img[0:940,:939]
print(img_now.shape)
#add有饱和运算(250+28>255,取值为255)
add = cv2.add(img_now,img2)
#subtract有下益运算(20-10<0,取值为0)
subtract = cv2.subtract(img_now,img2)
#和add一样
multiply = cv2.multiply(img_now,img2)
#和subtract一样
divide = cv2.divide(img_now,img2)
cv2.imshow('LGQ',add)
cv2.imshow('LHT',subtract)
cv2.imshow('LGQLHT',multiply)
cv2.imshow('LHTLGQ',divide)
cv2.waitKey(0)
cv2.destroyAllWindows()

照片的融合

import cv2
import numpy as np
img = cv2.imread('./01.jpeg')
img2 = cv2.imread('./02.jpg')
# print(img2.shape)
img_now = img[0:940,0:939]
# print(img_now.shape)
new_img = cv2.addWeighted(img_now,0.7,img2,0.3,0)
cv2.imshow('LGQ',new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCv的位运算

import cv2
import numpy as np
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
cv2.resizeWindow('LGQ',640,480)
img = cv2.imread('./01.jpeg')
img2 = cv2.imread('02.jpg')
img3= img[0:940,0:939]
img1= cv2.bitwise_not(img)
img4 = cv2.bitwise_and(img2,img3)
# img5 = img4[0:5,0:5]
# print(img5)
img5 = cv2.bitwise_or(img2,img3)
# cv2.imshow('LGQ',np.hstack((img,img1)))
# cv2.imshow('LGQ',np.hstack((img2,img3,img4)))
cv2.imshow('LGQ',np.hstack((img2,img3,img5)))
cv2.waitKey(0)
cv2.destroyAllWindows()

resize用法

import cv2
img = cv2.imread('01.jpeg')
# img1 = cv2.resize(img,(640,480))
# img1 = cv2.resize(img,(640,480),interpolation=cv2.INTER_NEAREST)
# img1 = cv2.resize(img,(640,480),interpolation=cv2.INTER_LINEAR)
# img1 = cv2.resize(img,(640,480),interpolation=cv2.INTER_CUBIC)
# img1 = cv2.resize(img,(640,480),interpolation=cv2.INTER_AREA)
img1 = cv2.resize(img,dsize=None,fx=0.3,fy=0.1)
cv2.imshow('LGQ',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

trackbar用法

import cv2
import numpy as np
#创建窗口
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
#改变窗口大小
cv2.resizeWindow('LGQ',640,480)
#定义一个回调函数
def huidiao(value):
    print(value)
#创建trackbar值
cv2.createTrackbar('R','LGQ',0,255,huidiao)
cv2.createTrackbar('G','LGQ',0,255,huidiao)
cv2.createTrackbar('B','LGQ',0,255,huidiao)
#创建一个背景图片
img = np.zeros((480,640,3),np.uint8)
#print(img)
while(1):
    #获取Trackbar值
    r = cv2.getTrackbarPos('R','LGQ')
    g = cv2.getTrackbarPos('G','LGQ')
    b = cv2.getTrackbarPos('B','LGQ')
    #改变图片颜色
    img[:]= [b,g,r]
    cv2.imshow('LGQ',img)
    if cv2.waitKey(1) == ord('1'):
        break
cv2.destroyAllWindows()

深浅拷贝

import cv2
import numpy as np
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
cv2.resizeWindow('LGQ',1280,960)
img = cv2.imread('./01.jpeg')
#浅拷贝
img2 = img.view()
#深拷贝
img3 = img.copy()
img[10:100,10:100] = [0,0,255]
cv2.imshow('LGQ',np.hstack((img,img2,img3)))
cv2.waitKey(0)
cv2.destroyAllWindows()

画线

import cv2
import numpy as np
#创建黑色的背景图
img = np.zeros((480,640,3),np.uint8)
cv2.line(img,(10,20),(100,150),(0,0,255),5,16)
cv2.line(img,(100,150),(300,1000),[255,0,0],5,156)
cv2.imshow('LGQ',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画矩形和圆

import cv2
import numpy as np
#绘制黑色背景
img = np.zeros((480,640,3),np.uint8)
#retactangle(照片,起点坐标,终点坐标,颜色,笔粗,线形)
cv2.rectangle(img,(60,100),(130,200),(0,0,255),5,16)
#circle(照片,中心点,半径,颜色,笔粗,线形)
cv2.circle(img,(320,240),50,(0,0,255),5,16)
cv2.imshow('LGQ',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画椭圆

import cv2
import numpy as np
#创建黑色的背景图
img = np.zeros((480,640,3),np.uint8)
#ellipse(照片,中心点,(长轴的一半,短轴的一半),旋转角度(逆时针),画椭圆的起点,画椭圆的终点,颜色,笔粗,线形)
cv2.ellipse(img,(320,240),(100,50),0,0,360,(0,0,255),5,16)
cv2.ellipse(img,(320,240),(100,50),45,0,360,(255,0,255),5,16)
cv2.imshow('LGQ',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画多边形

import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)
p = np.array([(200,300),(29,89),(107,39),(300,66)],np.int32)
#polykines(照片,点的坐标,【True为封闭,False为不封闭】,颜色,笔粗)
cv2.polylines(img,[p],True,(0,0,255),5)
cv2.imshow('LGQ',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

照片的翻转和旋转

import cv2
import numpy as np
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
cv2.resizeWindow('LGQ',640,480)
# cv2.namedWindow('LHT',cv2.WINDOW_NORMAL)
# cv2.resizeWindow('LHT',640,480)
img = cv2.imread('02.jpg')
img_sf = cv2.flip(img,0)
img_zf = cv2.flip(img,1)
img_sz = cv2.flip(img,-1)
img_sx = cv2.rotate(img,rotateCode=cv2.ROTATE_90_CLOCKWISE)
img_x = cv2.rotate(img,rotateCode=cv2.ROTATE_180)
img_nx = cv2.rotate(img,rotateCode=cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow('LGQ',np.hstack((img,img_zf,img_sf,img_sz)))
# cv2.imshow('LHT',img_nx)
# cv2.imshow('LHT',img_sx)
# cv2.imshow('LHT',img_x)


cv2.waitKey(0)
cv2.destroyAllWindows()

仿色变换之平移

import cv2
import numpy as np
cv2.namedWindow('LGQ',cv2.WINDOW_NORMAL)
cv2.resizeWindow('LGQ',640,480)
img = cv2.imread('02.jpg')
h,w,ch = img.shape
#一定是要浮点型32位,float32
m = np.float32([[1,0,200],[0,1,-200]])
#warpAffine(照片,巨阵,调整为的尺寸(输出图像的尺寸))
img_now = cv2.warpAffine(img,m,dsize=(w,h))
cv2.imshow('LGQ',np.hstack((img,img_now)))
cv2.waitKey(0)
cv2.destroyAllWindows()
posted @   LGQLHT  阅读(45)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示