学习笔记1

python使用opencv获取图像尺寸(高宽深)

import cv2 as cv
img = cv.imread("D:\\test.jpg")
size = img.shape
h = size[0]     #高度
w = size[1]     #宽度 
chan = size[2]  #通道数

img.size #像素数目
print(size)
结果
(512,512,2)

imread返回的是numpy.ndarray对象,[高,宽,通道数]

 

cv2.imshow(winname,mat)

cv.imshow("name",mat)

mat是一个图片矩阵,numpy.ndarry类型

加上下面一句,让图像持续显示,0表示显示无限长时间

cv.waitKey(0)

 

用cv2.imwrite()保存图片

cv.imwrite("name",img)

 

使用cv2.cvtColor()函数来转换图片颜色空间

cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 将BGR图像转换为灰度图像
  • cv2.COLOR_BGR2RGB # 将BGR图像转换为RGB图像
  • cv2.COLOR_BGR2GRAY # 将BGR图像转换为灰度图像
  • cv2.COLOR_GRAY2BGR # 将灰度图像转换为BGR图像
 

 

彩色图片转灰度图可以直接读取灰度

import cv2 as cv
img = cv.imread('lbxx.jpg',0)  #直接以灰度图片读取
img_1 = cv.imread('lbxx.jpg',cv.IMREAD_GRAYSCALE)  

 

numpy使用astype转化数据类型,float默认转化为64位,可以使用np.float32指定为32位

#numpy转化float类型
a= np.array([1,2,3])
a = a.astype(np.float)
print(a)
print(a.dtype)

 

为了方便进行卷积,需要将opencv导入的numpy变成张量,然后再将tensor类型转换为32位浮点型
img_t = img_t.type(torch.float32)#将tensor类型转为float32
img_t = img_t.float() #也可以转为float32

 

 

matplotlib显示图像

 

plt.figure(figsize = (12,6))
plt.subplot(1,2,1)
plt.imshow(imconv2dout_im[0],plt.cm.gray)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(imconv2dout_im[1],plt.cm.gray)
plt.axis("off")
plt.show()

 

  • Figure fig = plt.figure(): 可以解释为画布。
    • 画图的第一件事,就是创建一个画布figure,然后在这个画布上加各种元素。
  • Axes ax = fig.add_subplot(1,1,1): 不想定义,没法定义,就叫他axes!
    • 首先,这个不是你画图的xy坐标抽!
    • 希望当初写这个lib的时候他们用一个更好的名字。。。
    • 可以把axes理解为你要放到画布上的各个物体。比如你要画一个太阳,一个房子,一个车在画布上,那么太阳是一个axes,房子是一个axes,etc。
    • 如果你的figure只有一张图,那么你只有一个axes。如果你的figure有subplot,那么每一个subplot就是一个axes
    • axes是matlibplot的宇宙中心!axes下可以修改编辑的变量非常多,基本上能包含你的所有需求。
  • Axis ax.xaxis/ax.yaxis: 对,这才是你的xy坐标轴。
    • 每个坐标轴实际上也是由竖线和数字组成的,每一个竖线其实也是一个axis的subplot,因此ax.xaxis也存在axes这个对象。对这个axes进行编辑就会修改xaxis图像上的表现。

 

 

 

opencv图像通道的拆分

cv2.split()将三通道的BGR彩色图像分离成B\G\R单通道图像

使用NumPy切片分离通道更简单

 

 

 

    # 1.6 图像的显示(cv2.imshow)
    imgFile = "../images/imgLena.tif"  # 读取文件的路径
    img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)
    img2 = cv2.imread(imgFile, flags=0)  # flags=0 读取为灰度图像
    
    cv2.imshow("Demo1", img1)  # 在窗口 "Demo1" 显示图像 img1
    cv2.imshow("Demo2", img2)  # 在窗口 "Demo2" 显示图像 img2
    key = cv2.waitKey(0)  # 等待按键命令, 1000ms 后自动关闭

 

 

    # 1.8 图像显示(多个图像组合显示)
    imgFile1 = "../images/imgLena.tif"  # 读取文件的路径
    img1 = cv2.imread(imgFile1, flags=1)  # flags=1 读取彩色图像(BGR)
    imgFile2 = "../images/imgGaia.tif"  # 读取文件的路径
    img2 = cv2.imread(imgFile2, flags=1)  # # flags=1 读取彩色图像(BGR)

    imgStack = np.hstack((img1, img2))  # 相同大小图像水平拼接
    cv2.imshow("Demo4", imgStack)  # 在窗口 "Demo4" 显示图像 imgStack
    key = cv2.waitKey(0)  # 等待按键命令, 1000ms 后自动关闭

 

posted @ 2023-09-22 10:25  ChLizzZ  阅读(31)  评论(0)    收藏  举报