Opencv方法指令

Opencv 方法指令

  • 图像窗口的打开与关闭
        • 打开:img=cv2.imread(image_path)
        • 显示:cv2.imshow("test",img)
        • 控制: cv2.waitKey()其中可以填显示时间,>0则显示那么长时间,空/0则固定
        • 关闭窗口: cv2.destroyAllWindows()
  • 视频的打开与关闭
        • 打开
  • 像素值的修改
        • 方法一:暴力循环修改
        • 方法二:直接修改
  • 手动生成图像
  • 图像的色彩空间
  • 如果想从图像或者视频中按照某个物体的颜色将其轮廓提取出来,则采用HSV色彩空间变换方法
  • 图像通道的分割与合并

图像窗口的打开与关闭

打开:img=cv2.imread(image_path)

显示:cv2.imshow(“test”,img)

控制: cv2.waitKey()其中可以填显示时间,>0则显示那么长时间,空/0则固定

关闭窗口: cv2.destroyAllWindows()

视频的打开与关闭

打开

1
2
3
4
5
6
7
8
9
10
11
   cap=cv2.VideoCapture(video_path)
   while(True):
       ret,frame=cap.read()
       if ret==False:
            break
       frame=cv2.flip(frame,1)#左右镜像处理
       cv2.imshow('frame',frame)
       c=cv2.waitKey(30)#设定30秒
       if c==27:#如果按ESC键,则退出
           break
   cap.release()#释放资源

像素值的修改

方法一:暴力循环修改

1
2
3
4
5
6
7
8
img=cv2.imread(image_path)
h,w,c=img.shape
for row in range(h):
    for col in range(w):
        for ch in range(c):
            pixel=img[row,col,ch]
            img[row,col,ch]=255-pixel
#相当于将图像的每个通道,每个像素点的值取反

方法二:直接修改

1
2
img=cv2.bitwise_not(src)#图像像素取反
#功能与上面相同,相当于将每个像素的值按位取反

手动生成图像

可以先手动生成一个具体大小的shape的图像区域,对其填充全0,或者全1,即生成一个对应维数的全零、全一矩阵,然后在对其统一赋值

1
2
3
4
5
6
7
    img=np.zeros([400,400,3],dtype=np.uint8)
    img[:,:,2]=np.ones([400,400],np.uint8)*255
    cv2.imshow("creat",img)
    #生成一个全零的三通道矩阵,并对第三个通道赋值为255
    或者:
    img=img[:,:,2]
    img.fill(255)

图像的色彩空间

主要有RGB,GRAY,HSV,YUV

1
2
3
4
5
6
7
img=cv2.imread(image_path)
#灰度变换
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#HSV变换
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#YUV变换
yuv=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)

如果想从图像或者视频中按照某个物体的颜色将其轮廓提取出来,则采用HSV色彩空间变换方法

在这里插入图片描述
上面是HSV的颜色分量表
如:想将下图RGB图像中的绿色物体找到,得到右侧的效果图
在这里插入图片描述
我们以视频处理为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cap=cv2.VideoCapture('./2.mp4')
    while(True):
        ret,frame=cap.read()
        if ret==False:
            break
        '''
        hsv 通过inRange可以对视频/图像中的颜色进行追踪
        '''
        hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#RGB转HSV
        lower_hsv=np.array([35,43,46])#绿色最低值
        higher_hsv=np.array([77,255,255])#黄色最高值
        mask=cv2.inRange(hsv,lowerb=lower_hsv,upperb=higher_hsv)#通过cv2.inRange,就可以找到图像中的绿色物体
        cv2.imshow('frame',frame)
        cv2.imshow('mask',mask)
        if cv2.waitKey(30)==27:
            break
    cap.release()

图像通道的分割与合并

1
2
b,g,r=cv2.split(src)#通过cv2.split进行分割
img=cv2.merge([b,g,r])#通过cv2.merge进行合并,但是其参数是一个数组形式