python3-opencv库(1)--图像属性,图像的读取、显示与写入,视频的读取、显示

"""转载请注明作者及出处"""

"""第一,我们可以认为图像是由一个个像素组成的二维数组,比如800X600的图像就是由
宽为800像素,高为600像素的二维像素阵列组成的。

第二,每个像素有各自的颜色,每个像素的数据必须要明确的储存该像素点呈现的颜色信息,
而颜色是由三个RGB值来表示,BGR(0~255,0~255,0~255),(有的地方是RGB)那么每个像素就是一个有着3个元素的一维数组,
比如[12,58,88]。

第三,一幅图像整体就是一个三维数组(像素组成二维阵列,像素本身又是一维数组)"""

"""一个图像有如下几种属性"""
from cv2 import cv2
import numpy as np


img = cv2.imread('1.jpg') #图片读取,参数是图像文件的路径

print(type(img)) #打印变量类型
#输出:<class 'numpy.ndarray'>

print(img.shape) #打印图片形状(高,宽,通道数),高宽的单位是像素数
#通道数是什么?并非所有图都是彩色图,黑白图可没有BGR三参,黑白图的通道数就是1,彩图通道数为3
#输出:(1953, 2922, 3)

print(img.size) #打印图片尺寸(尺寸=高X宽X通道数)
#输出:17119998

print(img.dtype) #打印数组元素类型
#输出:uint8       因为RGB颜色范围是0~255,8bit就足够了

pixel_data = np.array(img) #从图像生成纯粹的三维数组
print(pixel_data)          #打印图片的像素数据矩阵



#当然,可以吧上述属性综合在一个函数中,调用函数即可全部显示
def get_img_info(img):
    print("变量类型:%s" % type(img)) #打印变量类型
    print("图片高、宽、通道数:%s,%s,%s" % 
          (img.shape[0],img.shape[1],img.shape[2])) #打印图片形状(高,宽,通道数)
    print("图片尺寸:%s" % img.size)  #打印图片尺寸(尺寸=高X宽X通道数)
    print("数据类型:%s" % img.dtype) #打印表示图片RGB值得数据的数据类型(uint8 or uint16)
    pixel_data = np.array(img)
    print(pixel_data) #打印图片的像素数据矩阵
"""图像的读取、显示与写入"""

from cv2 import cv2


img = cv2.imread('1.jpg')
#图片读取,参数是图像文件的路径

"""------各种图像处理------"""

cv2.imshow("img_window",img)
#创建一个窗口名为"img_window",在该窗口中显示图像img

cv2.imwrite("D:/picture/result1.png",img) 
#将图像对象img以指定文件名(result1.png)写入指定路径(D盘的picture文件夹)

cv2.waitKey(0)
#等待键盘的输入,接收到输入之后才会继续运行

cv2.destroyAllWindows() 
#执行本行代码即会关闭之前打开的所有窗口,基本上所有opencv程序都有此代码
"""视频的读取、显示"""
from cv2 import cv2
import numpy as np 

#当然,也可以不定义函数,这里只是为了展示几个方法
def video_demo():
    capture = cv2.VideoCapture(0) #参数0表示捕获电脑摄像头的影像,此处创建了一个镜头捕获
    while True:
        ret, frame = capture.read() #通过while循环,将捕获到的摄像头的影像逐帧取出(frame),ret代表什么?
        frame = cv2.flip(frame,1)  #返回的是每一帧图片左右对调(参数1表示左右翻转)后的值,不然摄像头视角看到的人都是左右相反的
        cv2.imshow("video",frame)  #将此帧图片显示在窗口"video"中
        k = cv2.waitKey(50)   #50表示50ms,表示运行到此处,停50ms等待键盘输入
        if k == 27: #27是键盘上Esc键的ASCII码,表示若50ms内你按Esc键此if语句判断为真
            break
    cv2.destroyAllWindows() #关闭所有窗口


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值