zoukankan      html  css  js  c++  java
  • Python-OpenCV基本操作cv2

    1.图片加载、显示和保存

    import cv2
    # 生成图片
    img = cv2.imread("1.jpg")
    # 生成灰色图片
    imgGrey = cv2.imread("1.jpg", 0)
    #  展示原图
    cv2.imshow("img", img)
    #  展示灰色图片
    cv2.imshow("imgGrey", imgGrey)
    #  等待图片的关闭
    cv2.waitKey()
    # 保存灰色图片
    cv2.imwrite("Copy.jpg", imgGrey)

    2.图像显示窗口创建与销毁

    cv2.namedWindow(窗口名,属性) 创建一个窗口

    属性—指定窗口大小模式: 

    cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小
    cv2.WINDOW_NORMAL:窗口大小可调整
    cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

    import cv2
    
    img = cv2.imread("1.jpg")
    
    cv2.namedWindow("img", cv2.WINDOW_NORMAL)
    cv2.imshow("img", img)
    cv2.waitKey()
    cv2.destroyAllWindows()

    3.图片宽、高、通道数获取

    img.shape 返回图像高(图像矩阵的行数)、宽(图像矩阵的列数)和通道数3个属性组成的元组,若图像是非彩色图,则只返回高和宽组成的元组。

    import cv2
    
    img = cv2.imread("1.jpg")
    imgGrey = cv2.imread("1.jpg", 0)
    
    sp1 = img.shape
    sp2 = imgGrey.shape
    
    print(sp1)
    print(sp2)
    # ======输出=======
    #(1200, 1920, 3)
    #(1200, 1920)

    4.图像像素数目和图像数据类型的获取

     图像矩阵img的size属性和dtype分别对应图像的像素总数目和图像数据类型。一般情况下,图像的数据类型是uint8。

    import cv2
    
    img = cv2.imread("1.jpg")
    
    imgSize = img.size
    print(imgSize)
    
    ty = img.dtype
    print(ty)
    #======输出========
    #6912000
    #uint8

    5 生成指定大小的空图像

       生成指定大小的空图像

    import cv2
    import numpy as np
    
    img = cv2.imread("1.jpg")
    imgZero = np.zeros(img.shape, np.uint8)
    
    imgFix = np.zeros((300, 500, 3), np.uint8)
    # imgFix = np.zeros((300,500),np.uint8)
    
    cv2.imshow("img", img)
    cv2.imshow("imgZero", imgZero)
    cv2.imshow("imgFix", imgFix)
    cv2.waitKey()

    6. 访问和操作图像像素

        OpenCV中图像矩阵的顺序是B、G、R。可以直接通过坐标位置访问和操作图像像素。

    import cv2
     
    img = cv2.imread("01.jpg")
     
    numb = img[50,100]
    print numb
     
    img[50,100] = (0,0,255)
    cv2.imshow("img",img)
    cv2.waitKey()

    分开访问图像某一通道像素值也炒鸡方便:

    import cv2
     
    img = cv2.imread("01.jpg")
     
    img[0:100,100:200,0] = 255
    img[100:200,200:300,1] = 255
    img[200:300,300:400,2] = 255
     
    cv2.imshow("img",img)
    cv2.waitKey()

    嗯,不得不说Python是一个很神奇的存在。

    Python中,更改图像某一矩形区域的像素值也很方便:

    import cv2
     
    img = cv2.imread("01.jpg")
     
    img[0:50,1:100] = (0,0,255)
     
    cv2.imshow("img",img)
    cv2.waitKey()

    7. 图像三通道分离和合并

    分离图像通道可以使用cv2中的split函数,合并使用merge函数。

    import cv2
     
    img = cv2.imread("01.jpg")
     
    b , g , r = cv2.split(img)
     
    # b = cv2.split(img)[0]
    # g = cv2.split(img)[1]
    # r = cv2.split(img)[2]
     
    merged = cv2.merge([b,g,r])
     
    cv2.imshow("Blue",b)
    cv2.imshow("Green",g)
    cv2.imshow("Red",r)
     
    cv2.imshow("Merged",merged)
    cv2.waitKey()

    8. 在图像上输出文字

    使用putText函数在图片上输出文字,函数原型:
    putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

      1. img: 图像
      2. text:要输出的文本
      3. org: 文字的起点坐标
      4. fontFace: 字体
      5. fontScale: 字体大小
      6. color: 字体颜色
      7. thickness: 字图加粗
    import cv2
     
    img = cv2.imread("01.jpg")
     
    cv2.putText(img,"Print some text to img",(100,100),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255))
     
    cv2.imshow("img",img)
    cv2.waitKey()

    9. 图像缩放

    缩放使用cv2.resize()函数,resize函数里的size第一个是宽(列),第二个是高(行)。

    import cv2
    
    img = cv2.imread("1.jpg")
    cv2.imshow("img", img)
    
    imgg = cv2.resize(img, (200, 100))
    
    cv2.imshow("imgg", imgg)
    
    cv2.waitKey()

    10.图片灰化处理

    # from matplotlib import pyplot as plt
    # import cv2
    # from pylab import *
    #
    # # 添加中文字体支持
    # from matplotlib.font_manager import FontProperties
    # font = FontProperties(fname=r"c:windowsfontsSimSun.ttc",size = 14)
    #
    # # 载入图像
    # im = cv2.imread('1.jpg')
    # # 显示原始图像
    # fig = plt.figure()
    # subplot(121)
    # plt.gray()
    # im2 = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) #OpenCV采用BGR排列顺序,需要转换一下.
    # imshow(im2)
    # title(u'彩色图', fontproperties= font)
    # axis('off')
    # # 显示灰度化图像
    # # 颜色空间转换
    # gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    # plt.subplot(122)
    # plt.gray()
    # imshow(gray)
    # title(u'灰度图', fontproperties= font)
    # axis('off')
    # show()

     转换后的结果

    11.在python3 下使用OpenCV抓取摄像头图像提取蓝色

     

    import cv2
    import numpy as np
    
    cap  = cv2.VideoCapture(0)
    for i in range(0, 19):
         print(cap.get(i)) 
    while(1):
         ret, frame = cap.read()
         hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    
        lower_blue = np.array([100, 47, 47])
         upper_blue = np.array([124, 255,255])
    
        mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色掩模
    
        res = cv2.bitwise_and(frame, frame, mask = mask)
    
        cv2.imshow(u"Capture", frame)
         cv2.imshow(u"mask", mask)
         cv2.imshow(u"res", res)
    
        key = cv2.waitKey(1)
         if key & 0xff == ord('q') or key == 27:
             print(frame.shape,ret)
             break
    cap.release()
    cv2.destroyAllWindows()

     

    以下是从wangyblzu博客截下来的HSV颜色分量范围

    https://www.cnblogs.com/wangyblzu/p/5710715.html

     

    三张结果图

     

  • 相关阅读:
    SQL Server 2005 学习笔记之触发器简介[转]
    什么是BCD 码
    关于C# 中的Attribute 特性
    也谈Asp.net 中的身份验证
    SQL Server 2005 创建分区表
    使用SerialPort 对象实现串口拨号器通信[下]
    子角色权限的实现
    SQL Server 中,实现 varbinary 与 varchar 类型之间的数据转换
    TSQL 常用排名函数
    关于ASP.NET 将数据导出成Excel 的总结[中]
  • 原文地址:https://www.cnblogs.com/zlel/p/9267629.html
Copyright © 2011-2022 走看看