show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次研究了图像的shape
- 高度
- 宽度
- 通道数
- 并且把图像从RGB色彩模式修改为灰度色彩模式
- 结果仍然是三维列表
- 真正的灰度图也是三维列表吗?🤔
- 准备素材图片
- 重启蓝桥后会发现gear.jpg
import cv2
image = cv2.imread("/home/shiyanlou/gear.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow("image",image)
print(image)
print(image.shape)
key = cv2.waitKey()
if key & 0xFF == ord("q"):
cv2.destoryAllWindows()
- 运行结果
- 降维成二维数组了吗?
import cv2
image = cv2.imread("/home/shiyanlou/gear.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow("image",image)
height, width = image.shape
print(image)
print("type(image)====", type(image))
print("image.ndim====", image.ndim)
print("image.dtype====", image.dtype)
print("height====",height)
print("width====",width)
print("image.size====", image.size)
key = cv2.waitKey()
if key & 0xFF == ord("q"):
cv2.destroyAllWindows()
- 运行结果
- image的类型是numpy数组
- 二维数组
- 数据类型为8-bit的无符号整数
- 注意shape中
- 先得到的是高度值
- 后得到的是宽度值
- 具体数值是什么含义呢?
import cv2
image = cv2.imread("gear.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow("image",image)
height, width = image.shape
print(image)
print("image[0,0]=======",image[0][0])
print("image[0,1]=======",image[0][1])
print("image[1,0]=======",image[1][0])
print("image[1,1]=======",image[1][1])
key = cv2.waitKey()
if key & 0xFF == ord("q"):
cv2.destroyAllWindows()
- 查看图像时
- 可以用手触控板捏合或放大图像左上角
- 第一维度是纵坐标y
- 第二维度是横坐标x
- 可以用手触控板捏合或放大图像左上角
- 可以做一个单像素的jpg文件吗?
- 观察矩阵效果
import cv2
import numpy as np
vector = np.zeros((1,1),np.uint8)
print("vector=======",vector)
print("vector[0]====",vector[0])
print("vector[0][0]====",vector[0][0])
cv2.imshow("vector",vector)
vector[0,0] = 255
print("vector=======",vector)
print("vector[0]====",vector[0])
print("vector[0][0]====",vector[0][0])
cv2.imshow("vector2",vector)
cv2.waitKey()
cv2.destroyAllWindows()
- 制作了
- 一个纯黑像素
- 一个纯白像素
- 可以让像素更复杂一些吗?
- 设置一个3*1的向量矩阵
- 并观察
import cv2
import numpy as np
matrix = np.zeros((3,1),np.uint8)
print(matrix)
cv2.imshow("matrix",matrix)
for n in range(3):
matrix[n,0] = int(256/3*n)
print("="*50)
print(matrix)
cv2.imshow("matrix_2",matrix)
cv2.waitKey()
cv2.destroyAllWindows()
- 都是 3 * 1的矩阵
- 一个是纯黑
- 另一个是渐变色
- 可以做2*2矩阵吗?
import cv2
import numpy as np
matrix = np.zeros((2,2),np.uint8)
print(matrix)
cv2.imshow("matrix",matrix)
for i in range(2):
for j in range(2):
matrix[i,j] = int(256/4 * (i*2 + j ))
print("="*50)
print(matrix)
cv2.imshow("matrix_2",matrix)
cv2.waitKey()
cv2.destroyAllWindows()
- 并观察
- 第一维度 是 行
- 第二维度 是 列
- 做一个更大结构的画布
import cv2
import numpy as np
canvas = np.zeros((7,5),np.uint8)
print(canvas)
cv2.imshow("canvas",canvas)
cv2.waitKey()
cv2.destroyAllWindows()
- 结果
import cv2
import numpy as np
canvas = np.zeros((7,5),np.uint8)
cv2.putText(canvas,"0",(0,5),cv2.FONT_HERSHEY_DUPLEX,0.2,255,1)
print(canvas)
cv2.imshow("canvas",canvas)
cv2.waitKey()
cv2.destroyAllWindows()
数值 | 颜色 |
---|---|
255 | 纯白 |
0 | 纯黑 |
- 可以通过滚动条控制输出的字符吗?
import cv2
import numpy as np
def callback(value):
num = cv2.getTrackbarPos('ascii', 'canvas')
canvas = np.zeros((7,6),np.uint8)
print(num,chr(num),sep=":")
cv2.putText(canvas,chr(num),(0,5),cv2.FONT_HERSHEY_SIMPLEX,0.2,255,1)
print(canvas)
cv2.imshow('canvas', canvas)
cv2.namedWindow('canvas', cv2.WINDOW_NORMAL)
cv2.createTrackbar('ascii', 'canvas', 0, 127, callback)
canvas = np.zeros((7,6),np.uint8)
cv2.putText(canvas,"0",(0,5),cv2.FONT_HERSHEY_DUPLEX,0.2,255,1)
cv2.imshow("canvas",canvas)
cv2.waitKey()
cv2.destroyAllWindows()
- 效果
- 这次了解了一个纯灰度图的结构
- 纯灰度图被理解为一个二维矩阵
- 第一维 是 高度y
- 第二维 是 宽度x
- 纯灰度图被理解为一个二维矩阵
- 在图像中的每一个点
- 对应的像素
- 都可以映射到一个uint-8
- 无符号整型1字节(8-bit)
- 一个图像 在opencv里 就对应一个矩阵
- 这矩阵 就是 图像的基础
- 这矩阵 有什么门道呢?
- 怎么玩呢??🤔
- 我们下次再说 👋