一、读取一张图片,修改颜色通道后输出
可以得到图像的:行数,列数,通道数的矩阵,对矩阵进行操作可改变图像像素
代码如下:
import cv2 as cv #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理
def access_pixels(image):
print(image.shape)
height = image.shape[0] #图像的第一维度 高度
width = image.shape[1] #图像的第二维度 宽度
channels = image.shape[2] #图像的第三维度 通道数目
print("width : %s,height : %s,channels : %s" % (width, height, channels))
for row in range(height):
for col in range(width):
for c in range (channels):
pv = image[row, col, c]
image[row, col, c] = 255 - pv
cv.imshow("pixels_demo", image)
src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg") #读取图片位置
#blue green red
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) #创建一个GUI
cv.imshow("input image", src) #对窗口图片进行展示
t1 = cv.getTickCount()
access_pixels(src)
t2 = cv.getTickCount()
time = (t2 - t1)*1000/cv.getTickFrequency()
print("time : %s" % time)
cv.waitKey(0)
cv.destroyAllWindows() #释放所有的内存
运行截图:
cv::getTickCount()可以用来测量一段代码的运行时间,这个函数返回从上次开机算起的时钟周期数。
由于我们需要的是某个代码段运行的毫秒数,因此还需要另一个函数cv::getTickFrequency()。此函数返回每秒内时钟的周期数。
二、自定义一张多通道的图片
用到函数:zeros和ones
代码如下:
import cv2 as cv
import numpy as np
def create_image():
img = np.zeros([400, 400, 3], np.uint8)#zeros:double类零矩阵 创建400*400 3个通道的矩阵图像 参数时classname为uint8
img[:, :, 0] = np.ones([400, 400])*255#ones([400, 400])是创建一个400*400的全1矩阵,*255即是全255矩阵 并将这个矩阵的值赋给img的第一维
img[:, :, 1] = np.ones([400, 400])*255#第二维全是255
img[:, :, 2] = np.ones([400, 400])*255#第三维全是255
cv.imshow("new image", img)#输出一张400*400的白色图片(255 255 255):蓝(B)、绿(G)、红(R)
create_image()
cv.waitKey(0)
cv.destroyAllWindows()
运行结果是输出一张白色图片 也可修改255为其他数字来输出不同颜色的图片
也可单独使用ones函数,代码如下:
import cv2 as cv
import numpy as np
def create_image():
img = np.ones([400, 400, 3], np.uint8)
img[:, :, 0] = img[:, :, 0]*255
img[:, :, 1] = img[:, :, 1]*255
img[:, :, 2] = img[:, :, 2]*255
cv.imshow("new image", img)
create_image()
cv.waitKey(0)
cv.destroyAllWindows()
二:自定义一张单通道的图片
# -*- coding=GBK -*-
import cv2 as cv
import numpy as np
def create_image():
img = np.ones([400, 400, 1], np.uint8)#该像素点只有一个通道,该函数使所有像素点的通道的灰度值为1
img = img * 127 #使每个像素点单通道的灰度值变为127,0到255都可以,颜色由黑(0)转灰(127)转白(255)
cv.imshow("new image", img)
create_image()
cv.waitKey(0)
cv.destroyAllWindows()
注意:
1.代码里 img = img * 127 表示数组里的每个数值都乘以127
2.之所以np.ones函数参数类型是uint8,是因为uint8数的范围为0~255, 那么为0时恰好为黑色,为255时恰好为白色。若函数参数类型为int8,则int8类型数的范围为-128~127,那么-128则为黑色,127为白色
对于reshape()方法的使用
三、调用库函数来实现像素取反
# -*- coding=GBK -*-
import cv2 as cv
import numpy as np
#像素取反
def inverse(image):
dst = cv.bitwise_not(image)
cv.imshow("取反", dst)
src = cv.imread("C://1.jpg")
cv.namedWindow("原来", cv.WINDOW_NORMAL)
cv.imshow("原来", src)
t1 = cv.getTickCount()
inverse(src)
t2 = cv.getTickCount()
time = (t2 - t1)*1000/cv.getTickFrequency()
print("time: %s" % time)
cv.waitKey(0)
cv.destroyAllWindows()
调用bitwise_not函数运行时间非常快!