zoukankan      html  css  js  c++  java
  • 1. OpenCV-Python——环境配置及图像基本操作

    一、环境配置

    1、在虚拟环境中安装以下库:

      opencv-python==3.4.1.15

      opencv-contrib-python==3.4.1.15

      建议安装3.4.1的版本,3.4.2之后的版本做了专利保护,有的功能不能实现。

      虚拟环境的安装以及安装库的问题见PyQt5专栏中的第一节。

     2、安装jupyter notebook

      pip install jupyter——安装

      jupyter notebook——启动

    二、图像的基本操作

    1、图像的操作

    • cv2.IMREAD_COLOR:彩色图像
    • cv2.IMREAD_GRAYSCALE:灰度图像
     1 # *******************读取图片**********************开始
     2 # 导入库
     3 import cv2
     4 import numpy as np
     5 # import matplotlib.pyplot as plt
     6 
     7 # 读入图片
     8 # img = cv2.imread('cat.jpg')
     9 img = cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) # 读入灰度图像
    10 
    11 # 显示图片
    12 # cv2.imshow('image',img)
    13 # cv2.waitKey(10000)                          # 显示10秒
    14 # cv2.destroyAllWindows()
    15 
    16 # 定义展示图片函数
    17 def cv_show(name,img):
    18     cv2.imshow(name,img)
    19     cv2.waitKey(0)
    20     cv2.destroyAllWindows()
    21 
    22 cv_show('image',img)                          # 调用函数cv_show
    23 
    24 # 打印一些参数
    25 print(img)                                    # 打印图片
    26 print(img.shape)                              # 打印图像的尺寸
    27 print(type(img))                              # 打印的图像的格式
    28 print(np.size(img))                           # 打印图片的大小
    29 # *******************读取图片**********************结束

    2、视频的操作

    • cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
    • 如果是视频文件,直接指定好路径即可
     1 # *******************读取视频**********************开始
     2 # 导入库
     3 import cv2
     4 import numpy as np
     5 # import matplotlib.pyplot as plt
     6 
     7 vc = cv2.VideoCapture('test.mp4')               # 读取视频
     8 
     9 # 检查是否打开正确
    10 if vc.isOpened():
    11     open, frame = vc.read()
    12 else:
    13     open = False
    14 
    15 while open:
    16     ret, frame = vc.read()
    17     if frame is None:
    18         break
    19     if ret == True:
    20         gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)
    21         cv2.imshow('result', gray)
    22         if cv2.waitKey(10) & 0xFF == 27: # 每一帧的等待时间以及关闭
    23             break
    24 vc.release()
    25 cv2.destroyAllWindows()
    26 
    27 # *******************读取视频**********************结束

    3、截取部分图像+颜色通道获取

     1 # *******************截取部分图像+颜色通道获取**********************开始
     2 # 导入库
     3 import cv2
     4 # import numpy as np
     5 # import matplotlib.pyplot as plt
     6 
     7 img=cv2.imread('cat.jpg')
     8 cat=img[0:200,0:200]                         # 截取部分图像数据
     9 
    10 # 定义展示图片函数
    11 def cv_show(name,img):
    12     cv2.imshow(name,img)
    13     cv2.waitKey(0)
    14     cv2.destroyAllWindows()
    15 
    16 # cv_show('cat',cat)
    17 
    18 b,g,r=cv2.split(img)                        # 获取图像的r,b,g通道数值
    19 print(b)
    20 print(b.shape)
    21 
    22 img=cv2.merge((b,g,r))                      # r,g,b通道合成
    23 print(img.shape)
    24 
    25 # 只保留R
    26 cur_img = img.copy()
    27 cur_img[:,:,0] = 0                          # 除R通道其余都设置为0
    28 cur_img[:,:,1] = 0
    29 cv_show('R',cur_img)                        # 只保留R通道
    30 
    31 # 只保留G
    32 cur_img = img.copy()
    33 cur_img[:,:,0] = 0
    34 cur_img[:,:,2] = 0
    35 cv_show('G',cur_img)                        # 只保留G通道
    36 
    37 # 只保留B
    38 cur_img = img.copy()
    39 cur_img[:,:,1] = 0
    40 cur_img[:,:,2] = 0
    41 cv_show('B',cur_img)                        # 只保留B通道
    42 # *******************截取部分图像+颜色通道获取**********************结束

    4、边界填充

    • BORDER_REPLICATE:复制法,也就是复制最边缘像素。
    • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
    • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
    • BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
    • BORDER_CONSTANT:常量法,常数值填充。
     1 # *******************边界填充**********************开始
     2 import cv2
     3 import matplotlib.pyplot as plt
     4 
     5 img = cv2.imread('cat.jpg')
     6 
     7 # 设置参数
     8 top_size,bottom_size,left_size,right_size = (50,50,50,50)
     9 
    10 
    11 replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
    12 reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
    13 reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
    14 wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
    15 constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)
    16 
    17 plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
    18 plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
    19 plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
    20 plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
    21 plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
    22 plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
    23 
    24 plt.show()
    25 # *******************边界填充**********************结束

     5、数值计算

     1 # *******************数值计算**********************开始
     2 import cv2
     3 
     4 img_cat=cv2.imread('cat.jpg')
     5 
     6 print(img_cat[:5,:,0])                # 原图   打印前五行
     7 
     8 img_cat2 = img_cat+10
     9 print(img_cat2[:5,:,0])               # 处理后 打印前五行
    10 
    11 # 直接相加==%256  求余数
    12 print((img_cat+img_cat2)[:5,:,0])     # 相加后 打印前五行
    13 
    14 # add函数
    15 print(cv2.add(img_cat,img_cat2)[:5,:,0])     # add后 打印前五行
    16 # *******************数值计算**********************结束

    6、图像融合

      R = aX1 + aX2 + b 

     1 # *******************图像融合**********************开始
     2 import cv2
     3 
     4 img_cat=cv2.imread('cat.jpg')
     5 img_dog=cv2.imread('dog.jpg')
     6 
     7 # 查看当前图像的各自参数
     8 print(img_cat.shape)
     9 print(img_dog.shape)
    10 
    11 # 修改图像的大小  保持一致
    12 img_dog = cv2.resize(img_dog,(500,414))
    13 print(img_dog.shape)
    14 
    15 # 加权融合
    16 res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
    17 print(res.shape)
    18 
    19 # 显示图像
    20 # 定义展示图片函数
    21 def cv_show(name,img):
    22     cv2.imshow(name,img)
    23     cv2.waitKey(0)
    24     cv2.destroyAllWindows()
    25 
    26 cv_show('image',res)
    27 
    28 # 比例修改图像大小
    29 img_cat = cv2.resize(img_cat,(0,0),fx=3,fy=1)
    30 cv_show('cat_image',img_cat)
    31 # *******************图像融合**********************结束

     7、图像灰度转换

      cv2.COLOR_BGR2GRAY
    1 # *******************图像的灰度转换**********************开始
    2 import cv2                                            # opencv读取的格式是BGR
    3 # import numpy as np
    4 # import matplotlib.pyplot as plt                     # Matplotlib是RGB
    5 
    6 img=cv2.imread('cat.jpg')
    7 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)       # 灰度转换
    8 print(img_gray.shape)
    9 # *******************图像的灰度转换**********************结束
  • 相关阅读:
    Ecshop文件结构(Ecshop二次开发辅助文档)
    Python的Web开发环境搭建
    我的第一个.Net网站
    Windows2008R2安装sqlserver2005远程登陆失败错误18456
    SQLSERVER批量更新根据主键ID字符串
    2009年9月国内与国外浏览器市场粗略对比
    SQL2000与SQL2005下高效分页语句
    开源IIS Rewrite组件IonicIsapiRewriter2.0Releasebin
    C++中的typedef的用法
    关于NP complete
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12995377.html
Copyright © 2011-2022 走看看