OpenCV and pycharm学习路径

目录

读取、显示图像

从摄像头进行视频采集

视频录制

代码优化

OpenCV处理鼠标事件

Tracker使用

颜色转化

Numpy 的基本操作

获取子矩阵

图片信息

通道的分割与分离

绘图函数

用滑动条做调色板

 图像的基本操作

读取图片通道 

图片填充

实现鼠标绘制基本图像

目录

读取、显示图像

从摄像头进行视频采集

视频录制

代码优化

OpenCV处理鼠标事件

Tracker使用

颜色转化

Numpy 的基本操作

获取子矩阵

图片信息

通道的分割与分离

绘图函数

用滑动条做调色板

 图像的基本操作

读取图片通道 

图片填充

实现鼠标绘制基本图像

图像的加法

图像减法

图像溶合


读取、显示图像

import cv2
import numpy as np
img = cv2.imread('41.png',0)
cv2.imshow('image',img)
key = cv2.waitKey(0)
if key & 0xff == ord('q'):
    cv2.destroyWindow()
elif key & 0xff == ord('s'):
    cv2.imwrite('14.png',img)
    cv2.destroyWindow()

从摄像头进行视频采集

import cv2
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
#获取视频
cap = cv2.VideoCapture(0) #0:开启本地视频
#cap = cv2.VideoCapture('14.mp4') #读取本地的视频资源
while True:
    #从摄像头读取视频帧
    ret,frame = cap.read()

    #将视频帧在窗口显示出来
    cv2.imshow('video',frame)

    #等待键盘事件,如果为q,退出
    key = cv2.waitKey(1)
    if (key & 0xFF == ord('q')):
        break

#释放videoCapture
cap.release()
cv2.destroyWindow()

视频录制

VideoWriter:输出文件\多媒体文件格式(VideoWriter_fourcc)

步骤:

VideoWriter
write
release
import cv2
import numpy as np
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)

#获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture(0) #0:开启本地摄像头
#cap = cv2.VideoCapture('14.mp4') #读取本地的视频资源

#创建VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
vw = cv2.VideoWriter('out.avi',fourcc,25,(640,480))

while True:
    #从摄像头读取视频帧
    ret,frame = cap.read()
    #frame = cv2.flip(frame,0) #图像翻转函数
    #将视频帧在窗口显示出来
    cv2.imshow('video',frame)
    #写入
    vw.write(frame)
    #等待键盘事件,如果为q,退出
    key = cv2.waitKey(1)
    if (key & 0xFF == ord('q')):
        break
#释放videowriter
vw.release()
#释放videoCapture
cap.release()
cv2.destroyWindow()

代码优化

import cv2
import numpy as np
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)

#创建VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
vw = cv2.VideoWriter('out.avi',fourcc,25,(640,480))

#获取视频设备/从视频文件中读取视频帧
#cap = cv2.VideoCapture(0) #0:开启本地摄像头
#如果出现waning:`anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async cal 用下面
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
#cap = cv2.VideoCapture('14.mp4') #读取本地的视频资源

#判断摄像头是否为打开状态
while cap.isOpened():
    #从摄像头读取视频帧
    ret,frame = cap.read()
    #判断视频帧是否读取成功
    if ret == True:
        #frame = cv2.flip(frame,0) #图像翻转函数

        #将视频帧在窗口显示出来
        cv2.imshow('video',frame)
        cv2.resizeWindow('video', 640, 480)
        #写数据到多媒体文件
        vw.write(frame)

        #等待键盘事件,如果为q,退出
        key = cv2.waitKey(1)
        if (key & 0xFF == ord('q')):
            break
    else:
        break
#释放videowriter
vw.release()
#释放videoCapture
cap.release()
cv2.destroyWindow()

OpenCV处理鼠标事件

import cv2
import numpy as np
#自定义的callback函数
def mouse_callback(event,x,y,falgs,userdata):
    print(event,x,y,falgs,userdata)

#创建一个窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse',640,360)

#设置鼠标回调函数
cv2.setMouseCallback('mouse',mouse_callback,"123")
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
# 创建一个全黑的屏幕
img = np.zeros((360,640,3),np.uint8)
while True:
    cv2.imshow('mouse',img)
    key = cv2.waitKey(1)
    if key & 0xFF ==ord('q'):
        break
cv2.destroyAllWindows()

Tracker使用

import cv2
import numpy as np
#创建窗口
cv2.namedWindow('tracker',cv2.WINDOW_NORMAL)

#定义callback
def callback():
    pass

#创建tracker
cv2.createTrackbar('R','tracker',0,255,callback)
cv2.createTrackbar('G','tracker',0,255,callback)
cv2.createTrackbar('B','tracker',0,255,callback)

#设置纯黑色的背景
img = np.zeros((480,640,3),np.uint8)

while True:
    cv2.imshow('tracker',img)
    #获取当前tracker的值
    r = cv2.getTrackbarPos('R','tracker')
    g = cv2.getTrackbarPos('G', 'tracker')
    b = cv2.getTrackbarPos('B', 'tracker')

    img[:]=[b,g,r]
    cv2.imshow('tracker',img)

    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

颜色转化

#色彩空间的转化
import cv2

#创建窗口
cv2.namedWindow('color',cv2.WINDOW_NORMAL)

def callback(userdata):
    pass

img = cv2.imread('41.png')

colorspaces = [cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2GRAY,
               cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV]

cv2.createTrackbar('curcolor','color',0,4,callback)

while True:
    index = cv2.getTrackbarPos('curcolor','color')

    #颜色空间转换
    cvt_img = cv2.cvtColor(img,colorspaces[index])
    cv2.imshow('color',img)
    key = cv2.waitKey(10)
    print(key)
    if key & 0xff == ord('q'):
        break

cv2.destroyAllWindows()

Numpy 的基本操作

import numpy as np
#通过array定义矩阵
b = np.array([1,2,3])
c = np.array([[1,2,3],[4,5,6]])
print(c,b)
#zeros
a = np.zeros((2,3,2),np.uint8) #2列3行的矩阵
print(a)
#定义ones
d = np.ones((2,3),np.uint8)
print(d)
#定义full
e = np.full((8,8),10,np.uint8)
print(e)
#定义单位矩阵identity
f = np.identity(4)
print(f)
#定义单位矩阵eye
g = np.eye(5,7,key=3)
print(g)
#numpy的检索
#[y,x] 第y个值,第x个值
#[y,x,channel]
import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)#bgr
#获取矩阵中的值
print(img[100,100])
count = 0
while count<100:
    count+=1
    img[count,100]=[255,255,255] #count这里等于列 0 在这里是蓝色的

cv2.imshow('img',img)

key = cv2.waitKey(0)

if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()

获取子矩阵

#numpy的检索
#[y,x] 第y个值,第x个值
#[y,x,channel]
import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)#bgr
roi = img[100:400,100:400]
#获取子矩阵
roi[:,:]=[0,0,255]
roi[10:200,10:200] = [0,255,0]
cv2.imshow('img',roi)

key = cv2.waitKey(0)

if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()

图片信息

#numpy的检索
#[y,x] 第y个值,第x个值
#[y,x,channel]
import cv2
import numpy as np

img = cv2.imread('14.png')
#shape 属性中的三个信息
#高度、长度和通道数
print(img.shape)
#图像占用了多大的空间
#高度*长度*通道数
print(img.size)
#图像中每个元素的位深
print(img.dtype)

通道的分割与分离

#numpy的检索
#[y,x] 第y个值,第x个值
#[y,x,channel]
import cv2
import numpy as np
#创建一个图层
img = np.zeros((480,640,3),np.uint8)

#划线函数
cv2.line(img,(0,0),(100,100),(255,0,0),5)
#画矩形
cv2.rectangle(img,(0,0),(100,100),(0,255,0),3)
#画圆
#-1:涂满
cv2.circle(img,(200,200),60,(0,0,255),6)
#画椭圆
cv2.ellipse(img,(200,200),(20,100),0,0,360,(255,0,0),5)
#画多边形
#需要指定每个顶点的坐标,构建一个大小相等于行数X1X2的数组,行数就是点的数目,这个数组必须为int32.
pts = np.array([[100,5],[200,30],[70,200],[50,100]],np.int32)
print(pts)
pts = pts.reshape((-1,1,2))
print(pts)
##这里reshape的第一个参数为-1,表明这一维度的长度是根据后面的维度计算出来的
cv2.polylines(img,[pts],True,(0,255,255))
#在图片上添加文字
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,200),font,4,(255,255,255),2)
#创建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘图函数

#numpy的检索
#[y,x] 第y个值,第x个值
#[y,x,channel]
import cv2
import numpy as np

img = np.zeros((480,640,3),np.uint8)
#这个是深拷贝 通道的分割
b,g,r = cv2.split(img)

b[10:100,10:100]=255
g[10:100,10:100]=255
#通道的合并
img2=cv2.merge((b,g,r))

cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)
cv2.imshow('img',img)
cv2.imshow('img2',img2)

cv2.waitKey(0)

用滑动条做调色板

import cv2
import numpy as np
def nothing(x):
    pass
#创建一个黑色的图像
img = np.zeros((400,640,3),np.uint8)
cv2.namedWindow('image')
#滑动条做调色板
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
#只有当switch=on 滑动条可以使用
switch = '0:OFF\n1:ON'
print(switch)
cv2.createTrackbar(switch,'image',0,1,nothing)

while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1)
    if k==ord('q'):
        break
    r = cv2.getTrackbarPos('R','image')
    g = cv2.getTrackbarPos('G', 'image')
    b = cv2.getTrackbarPos('B', 'image')
    s = cv2.getTrackbarPos(switch,'image')

    if s ==0:
        img[:]=0
    else:
        img[:]=[r,g,b]
cv2.destroyAllWindows()

 图像的基本操作

import cv2
import numpy as np
img = cv2.imread('41.png')
#img.shape = (360,280,3)
print(img.shape)
px = img[100,100]
#px = [180 144 114] 代表着三个通道 b g r
print(px)
blue = img[100,100,0]
print(blue)
img[100,100]=[255,255,255]
cv2.namedWindow('image')
while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1)
    if k==ord('q'):
        break
cv2.destroyAllWindows()

读取图片通道 

import cv2
import numpy as np
#创建窗口
cv2.namedWindow('image')
#读取图片
img = cv2.imread('41.png')

#使用item和itemset 分割通道
print(img.item(10,10,2))
img.itemset((10,10,2),100) #设置这个位置的值
print(img.item(10,10,2))
#返回图像的数据类型
print(img.dtype)
#拆分及合并图像通道
r,g,b = cv2.split(img) #尽量少用
r = img[:,:,2]
g = img[:,:,1]
b = img[:,:,0]
print(r,g,b)
img2 = cv2.merge(r,g,b)#合并
while(1):
    cv2.imshow('image',img)
    cv2.imshow('image', img2)
    k = cv2.waitKey(1)
    if k==ord('q'):
        break
cv2.destroyAllWindows()

图片填充

#图像边界填充
import cv2
import numpy
from matplotlib import pyplot as plt
img = cv2.imread('41.png')
blue = [255,0,0]
replicate = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT)

plt.subplot(231),plt.imshow(img,'gray'),plt.title('original')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('rreflect101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('wrap')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')
#展示
plt.show()

实现鼠标绘制基本图像

import cv2
import numpy as np
curshape = 0
startpos = (0,0)#起始点
endpos = (0,0)
'''
基本功能
l键:画线 curshape = 0
r键:画矩形 curshape = 1
c键:画圆 curshape = 2
'''
#创建窗口
cv2.namedWindow('drawshape',cv2.WINDOW_NORMAL)
cv2.resizeWindow('drawshape',640,480)

#显示窗口和背景
img = np.zeros((480,640,3),np.uint8)

#鼠标回调函数
def mouse_callback(event,x,y,flags,userdata):
    #print(event,x,y,flags,userdata)
    global startpos
    if (event & cv2.EVENT_LBUTTONDOWN ==cv2.EVENT_LBUTTONDOWN): #鼠标左键按下
        startpos = (x,y)
    elif (event & cv2.EVENT_LBUTTONUP ==cv2.EVENT_LBUTTONUP): #鼠标左键按下
        if curshape==0:
            cv2.line(img,startpos,(x,y),(0,0,255))
        if curshape==1:
            cv2.rectangle(img,startpos,(x,y),(0,0,255))
        elif curshape==2:
            a = abs((x-startpos[0]))
            b = abs((y-startpos[1]))
            r = int((a**2+b**2)**0.5)
            cv2.circle(img,startpos,r,(0,0,255))
        else:
            print('error')

#设置鼠标回调函数
cv2.setMouseCallback('drawshape',mouse_callback,'123')

while (1):
    cv2.imshow('drawshape',img)
    key = cv2.waitKey(1) & 0xFF

    if key == ord('q'):
        print(key)
        break

    if key == ord('l'):#画线
        curshape = 0
        print(key)
    if key == ord('r'):#画矩形
        curshape = 1
        print(key)
    if key == ord('c'):#画圆
        curshape = 2
        print(key)

cv2.destroyAllWindows()

图像的加法

import cv2
import numpy as np
dog = cv2.imread('./dog.jpg')
print(dog.shape)
img = np.ones((1280,1920,3),np.uint8)*100 #100是曝光度
cv2.imshow('image',img)
cv2.imshow('orig',dog)
result = cv2.add(dog,img)
cv2.imshow('result',result)
cv2.waitKey(0)

图像减法

import cv2
import numpy as np
dog = cv2.imread('./dog.jpg')
print(dog.shape)
img = np.ones((1280,1920,3),np.uint8)*100 #100是曝光度
cv2.imshow('image',img)
cv2.imshow('orig',dog)
result = cv2.subtract(dog,img) #图像减法
cv2.imshow('result',result)
cv2.waitKey(0)

图片的加运算使图片更亮,减法使图片更暗

add(A,B):加法  subtract(A,B):减法

图像溶合

addWeight(A,alpha,B,bata,gamma) 

# alpha和beta 为权重 gamma :静态权重

 位操作

import cv2
import numpy as np
dog = cv2.imread('./dog.jpg')
img = np.zeros((200,200),np.uint8) #单通道的,黑白色
img2 = np.zeros((200,200),np.uint8) #单通道的,黑白色
img[50:150,50:150]=255
img2[50:150,50:150]=255
new_img = bitwise_and(img,img2) #与运算
new_img = bitwise_not(img,img2) #非运算
cv2.imshow('image',img)
cv2.imshow('image2',img2)
cv2.imshow('image2',new_img)
cv2.waitKey(0)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值