zoukankan      html  css  js  c++  java
  • OpenCV3 Python应用-1

    前段时间学校布置课程设计,选了个用教室图片检测出勤人数的题目.学了几天相应的基本操作


    基本I/O脚本

    1.读写图像文件

     1 import  cv2
     2 import numpy as np
     3 
     4 img = np.zeros((3,3),dtype=np.uint8)
     5 print(img)         #每个像素由八位整数表示,即每个像素值的范围2~255
     6 img=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)  #使用cv2.cvtColor函数将图像转换成BGR格式
     7 print(img)        #每个像素由一个三元数组表示,每个整型向量表示一个B,R,G通道
     8 
     9 img=np.zeros((3,3),dtype=np.uint8)
    10 print(img.shape)  #通过shape属性查看图像的结构,返回行和列,若是有一个以上的通道,还会返回通道数
    11 #上面返回的是(3,3),若是BGR格式返回(3,3,3)

    2.将jpg格式转换成png格式另存

    1 import cv2
    2 image=cv2.imread('test.jpg')
    3 cv2.imwrite('test.png',image)

    注意:通常情况下OPencv函数都在cv2模块内,可能有其他基于cv2.cv模块,这些都是传统模块
    python模块被称为cv2并不是针对OpenCV 2.x.x版本,而是因为该模块引入了更好的API接口

    默认情况下,即使图像为灰度格式,imread()函数也会返回BGR格式图像
    BGR与RGB所表示的色彩空间相同,但字节顺序相反

    3.将png文件作为灰度图像,然后又将其保存为灰度的png图像
    1 import cv2gray_image=cv2.imread('test.png',cv2.IMREAD_GRAYSCALE)
    2 cv2.imwrite('test_gray.png',gray_image)
    若是想使用其他文件夹中的图像可使用绝对路径
    windows: C:userappdate est.jpg
    Unix: /home/joe/picture/test.jpg

    imreade ()函数会删除alpha通道的信息(透明度).imwrite()函数要求图像为BGR格式或灰度格式
    并且每个通道要有一定的位,输出格式要支持这些通道

    4.图像与字节转换

    一个字节表示0-255整数
    一个像素通常由每个通道的一个字节表示
    一个OpenCV图像是.array类型的二维或三维数组
    8位的灰度图像是一个含有字节值的二维数组,一个24位BGR图像是一个三维数组,如:image[0,0]或image[0,0,0]
    第一个值表示y坐标或行,0表示顶部,第二个值是像素的x或列,0表示左边,第三个值表示颜色通道

     1 # byteArray = bytearray(image)    
     2 #将图像显式转换为标准的一维python bytearray格式
     3 
     4 # grayImage=numpy.array(grayByteArray).reshape(height,width)
     5 # bgrImage=numpy.array(bgrByteArray).reshape(height,width,3)
     6 #相反,bytearray可以通过显式转换和重构,得到numpy.array形式的图像
     7 
     8 import cv2
     9 import numpy
    10 import os
    11 
    12 #生成一个120000的随机字节组成的数组
    13 random_byte_Array=bytearray(os.urandom(120000))
    14 flat_Numpy_Array=numpy.array(random_byte_Array)
    15 
    16 #将这数组转换生成400*300的灰度图
    17 gray_image=flat_Numpy_Array.reshape(300,400)
    18 cv2.imwrite('RandomGray.png',gray_image)
    19 
    20 #将这数组转换生成400*100的彩色图
    21 bgrImage=flat_Numpy_Array.reshape(100,400,3)
    22 cv2.imwrite('RandomColor.png',bgrImage)
    23 
    24 #注:使用os.urandom()函数可随机生成原始字节,随后将其转换成Numpy数组
    25 # numpy.random.randint(0,256,120000).reshape(300,400)也可以生成Numpy数组(更高效)
    26 #但os.urandom()有助于原始字节的转换

    5.使用numpy.array访问图像数据


     1 # import cv2
     2 # import numpy as np
     3 # img = cv2.imread('test.png')
     4 
     5 #*********像素点转换
     6 # img[0,0] = [255,255,255]      #将图像在(0,0)处的像素转化为白像素
     7 # cv2.imshow('new test',img)    #显示图像
     8 # cv2.waitKey()                 #图像停留
     9 
    10 #********item()像素点转换
    11 # print(img.item(150,120,2))  #打印当前位置像素中B的值
    12 # # item()方法三个参数:x(左),y(上),(x,y)位置的数组索引取值为0-B,1-G,2-R
    13 # img.itemset((150,120,0),255) #替换当前位置像素中B的值为255
    14 # print(img.item(150,120,0)
    15 
    16 #********索引像素点转换
    17 #通过循环来处理python数组效率非常低,一般采用数组索引高效的操作像素
    18 # img = cv2.imread('test.png')
    19 # img[:,:,1]=0                    #将图像所有绿色G的值换成0
    20 # cv2.imshow('new',img)
    21 # cv2.imwrite('test_noG.png',img)
    22 # cv2.waitKey()
    23 
    24 #********截图
    25 import cv2
    26 import numpy as np
    27 img = cv2.imread('test.png')
    28 test_copy = img[0:100,0:100]              #将图像[0:100,0:100]范围的图像部分截取
    29 img[100:200,100:200] = test_copy          #将截取的图像放到图像[100:200,100:200]上,需要保证区域大小一样
    30 cv2.imwrite('test2.png',img)
    31 # cv2.imwrite('test_copy.png',test_copy)  #也可以将截取的部分新建一张图
    32 # cv2.imshow('new',img)
    33 # cv2.waitKey()
    34 
    35 # import cv2
    36 # import numpy as np
    37 # img = cv2.imread('test.png')
    38 # print(img.shape)        #打印宽度,高度,通道数     (400, 600, 3)
    39 # print(img.size)         #打印像素数值             720000
    40 # print(img.dtype)        #打印图像数据类型         uint8
    
    


  • 相关阅读:
    wikioi 1002 旁路
    OS X升级到10.10使用后pod故障解决方案出现
    Python challenge 3
    maven 编
    独立博客网站FansUnion.cn操作2多年的经验和教训以及未来计划
    Wakelock API详解
    智遥工作流——会签与多人审批区别
    mysql 参数optimizer_switch
    OpenRisc-31-关于在设计具有DMA功能的ipcore时的虚实地址转换问题的分析与解决
    TROUBLE SHOOTING: FRM-30425
  • 原文地址:https://www.cnblogs.com/xzb0-0/p/10211190.html
Copyright © 2011-2022 走看看