当前位置: 代码迷 >> 综合 >> 4. img.shape[:]、获取程序的执行的时间、图像的初始化和cv2.bitwise_not()
  详细解决方案

4. img.shape[:]、获取程序的执行的时间、图像的初始化和cv2.bitwise_not()

热度:3   发布时间:2023-12-15 12:47:52.0

1.获取图像的高、宽、通道数

height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
# 也可以直接写成:
height, width, channels = image.shape[:]

2.计算程序的执行时间-cv2.getTickCount()、cv2.getTickFrequency()

  • cv2.getTickCount()  作用:用于返回从操作系统启动到当前所经的计时周期数.
  • cv2.getTickFrequency() 作用:用于返回CPU的频率,单位是s.
  • 得到某段程序的执行时间: time = (t2 - t1)/cv.getTickFrequency() ,单位是s. t1、t2:分别表示函数执行前和执行后的时间。(知道怎么用就行)
     

3. 图像的创建和修改

img = np.zeros([400, 400, 3], np.uint8)          # 创建多维数组,每个值都是0,类型为uint8.
img[:, :, 0] = np.ones([400, 400]) * 255         # 对B通道的进行幅值,全为255.
cv.imshow("new_image", img)

注意:np.array()和np.reshape()的区别:np.array()中的数字指的是具体的数值,np.reshape()中的值数字代表维度。

4. 将图像颜色颠倒-cv2.bitwise_not()

5. 完整代码:

import cv2 as cv
import numpy as npdef access_pixels(image):  # 获取图片高宽通道print(image.shape)height = image.shape[0]width = image.shape[1]channels = image.shape[2]# 也可以直接写成:# height, width, channels = image.shape[:]print("width: %s, height: %s, channels: %s"%(width, height, channels))new_image = image.copy()  # 复制image图片for row in range(height):for col in range(width):for c in range(channels):pv = image[row, col, c]new_image[row, col, c] = 256 - pv  # 图像反转cv.imshow('pixels_demo', new_image)def create_image():img = np.zeros([400, 400, 3], np.uint8)          # 创建多维数组,每个值都是0,类型uint8.img[:, :, 0] = np.ones([400, 400]) * 255         # 对B通道的进行赋值,全为255.cv.imshow("new_image", img)# 对单通道进行操作# img = np.ones([400, 400, 1], np.uint8)# img = img * 0# cv.imshow("new_image", img)def inverse(image):dst = cv.bitwise_not(image)  # 按位取反,白变黑,黑变白,效果和new_image一样cv.imshow("inverse_demo",dst)if __name__ == '__main__':src = cv.imread("../images/CrystalLiu1.jpg")  # 读入图片放进src中cv.namedWindow("Crystal Liu", cv.WINDOW_AUTOSIZE)  # 创建窗口, 窗口尺寸自动调整cv.imshow("Crystal Liu", src)  # 将src图片放入该创建的窗口中create_image()t1 = cv.getTickCount()  # 获取当前电脑时钟滴答数access_pixels(src)inverse(src)t2 = cv.getTickCount()time = (t2 - t1)/cv.getTickFrequency()  # 函数执行前后滴答数之差与滴答频率之比为前后时间差print("time: %s ms"%(time * 1000))cv.waitKey(0)