1.遍历读取图像的每个像素点,打印出属性值
示例代码如下:
# 遍历读取图片的每一个像素点,打印出其属性值
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))
print("----------- Hello Guyan -----------")
src = cv.imread('./images/handsomeboy01.jpg')
cv.namedWindow("Image Windows01",cv.WINDOW_AUTOSIZE)
cv.imshow("Image Windows01",src)
access_pixels(src)
cv.waitKey(0)
cv.destroyAllWindows()
2.并且可以在定义的函数执行之前,统计函数运行结束所用的时间,这个时候就要用到以下两个函数了。
(1)getTickCount():返回从操作系统启动到当前所经过的计时周期数
(2)getTickFrequency()函数用于返回CPU的频率
t1 = cv.getTickCount()
access_pixels(src)
t2 = cv.getTickCount()
time = (t2 - t1) / cv.getTickFrequency()
print('当前所用的时间为:%s ms' % (time*1000))
cv.waitKey(0)
cv.destroyAllWindows()
2.创建一张图像
1.创建一个多通道的图像,并且dtype类型为np.uint8.
在这里我们创建了三通道的长宽为400的图像,并且我们可以为每一个通道的像素点进行修改。
示例代码如下:
def create_image():
#1.创建一个多通道的8位图像进行显示,
#修改图片的像素点的值
# 创建一个三通道的长宽为400,并且dtype类型为np.uint8
img = np.zeros([400,400,3],np.uint8)
# 但是我们同样可以对创建的图片的每一个像素点进行修改,
# 对第一个通道的像素点进行修改,
img[:,:,0] = np.ones([400,400])*255
# 此时就已经可以进行显示了
cv.imshow('Image Windows02',img)
# getTickCount()返回从操作F系统启动到当前所经过的计时周期数
t1 = cv.getTickCount()
# 此时就只是调用自己创建图片的函数create_image()
create_image()
t2 = cv.getTickCount()
# getTickFrequency()函数,用于返回CPU的频率,
# (getTickCount1 - getTickCount2)/getTickFrequency():
# (当前次数 - 开始计时次数) / 每秒钟重复次数 = 等于从开始到当前所用的时间。
time = (t2 - t1) / cv.getTickFrequency()
# 注意这里一定要带上括号,要不然就会将当前是所用的时间打印1000次
# print('当前所用的时间为:%s ms' % time*1000)
print('当前所用的时间为:%s ms' % (time*1000))
cv.waitKey(0)
cv.destroyAllWindows()
2.创建一个单通道的8位的图像进行显示
在这里我们将会使用两种初始化图像的方法进行举例。
(1)其中一种就是可以将图像初始化为每个像素点为0,之后就可以通过加减的操作对图像的像素点进行处理。
(2)另外一种就是将所有的像素点都初始化为1,之后就可以对像素点进行乘除的操作,进行改变像素点的大小。
注意,在创建单通道图像时,也要加上通道数1,要不然会认为是二维,并且会报错:ndexError: too many indices for array.
示例代码如下:
def create_image():
# 1. 初始化的时候,使用0,进行初始化
img = np.zeros([400,400,1],np.uint8)
# # 127就是灰度图像
img[:, :, 0] = np.ones([400,400])*127
<!--显示图像-->
cv.imshow("Image windows03",img)
# 2. 初始化的时候使用1进行初始化,会更加灵活一点
img = np.ones([400,400,1],np.uint8)
# 得到的是灰度图像
img1 = img*127
# 得到的是黑色图像
img2 = img*0
# 显示图像
cv.imshow("Image Windows04",img1)
cv.imshow("Image Windows05",img2)
# 保存图像到本地dist/images/turtor_01/img_127.jpg和img_0.jpg
cv.imwrite('./dist/images/turtor_01/img_127.jpg',img1)
cv.imwrite('./dist/images/turtor_01/img_0.jpg',img2)
# getTickCount()返回从操作F系统启动到当前所经过的计时周期数
t1 = cv.getTickCount()
# getTickCount()函数,返回从操作系统启动到当前的计时周期数
# 此时就只是调用自己创建图片的函数create_image()
create_image()
t2 = cv.getTickCount()
# getTickFrequency()函数,用于返回CPU的频率,
# (getTickCount1 - getTickCount2)/getTickFrequency():
# (当前次数 - 开始计时次数) / 每秒钟重复次数 = 等于从开始到当前所用的时间。
time = (t2 - t1) / cv.getTickFrequency()
# 注意这里一定要带上括号,要不然就会将当前是所用的时间打印1000次
# print('当前所用的时间为:%s ms' % time*1000)
print('当前所用的时间为:%s ms' % (time*1000))
cv.waitKey(0)
cv.destroyAllWindows()
3.初始化多维数组
在以后进行图像处理时,如果有浮点类型的,一定要用浮点类型的,为了避免数据被截断。
m1 = np.ones([3,3],np.float)
m1.fill(12.33)
print(m1)
m2 = m1.reshape([1,9])
print(m2)