写的很乱,用手机看的话阅读体验可能不是很好
读图并显示
import cv2
# 导入一张图像 模式为彩色图片
img = cv2.imread('pict.jpg', cv2.IMREAD_COLOR)
# 导入一张图像 模式为灰度图
#img=cv2.imread('pict.jpg',cv2.IMREAD_GRAYSCALE);
#建立窗口(允许拖动窗口变换窗口大小,不固定宽高比)
cv2.namedWindow('win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_FREERATIO)
cv2.imshow('win',img);
key_pressed=cv2.waitKey(0);
读图片尺寸
h,w=img.shape[0:2]
建立空白画布
#建立全黑的彩色画布
img_new=np.zeros([300,300,3],img.uint_8)
#建立全黑的灰度
img_new=np.zeros([300,300,1],img.uint_8)
#创建与另外一个图像尺寸相同的画布
canvas_black = np.zeros_like(img)
#白色画布
canvas_white = np.ones((300, 300, 3), dtype="uint8")
canvas_white *= 255
图片数据类型
img = cv2.imread('pict.jpg', cv2.IMREAD_COLOR)
img_new=np.ones([300,300,3],img.dtype)
#img_new=np.ones([300,300,3],img.uint_8)
.dtype 可以读出数据类型
其实图片的是uint_8
按键
key_num = cv2.waitKey(0)
if key_num == ord('k'):
print("k pressed...")
销毁窗口
销毁指定窗口
cv2.destroyWindow ( window_name)
销毁所有窗口
cv2.destroyALLWindows ( )
保存图片
cv2.imwrite(‘./pict1.png’, img)
cv2.imwrite(‘./pict2.jpg’, img)
jpge压缩保存
cv2.imwrite(‘pict. img, [cv2.IMWRITE_JPEG_QUALITY, 50])
第三个参数:图像质量cv2.IMWRITE_JPEG_QUALITY
, 取值范围在 0-100, 默认是95.
PNG压缩保存
PNG对应的称之为压缩级别cv2.IMWRITE_PNG_COMPRESSION
取值范围从0到9. 0 代表无压缩, 9代表最大压缩
cv2.imwrite(‘pict’, img,[cv2.IMWRITE_PNG_COMPRESSION, 4])
通道分离
(channel_b, channel_g, channel_r) = cv2.split(canvas)
通道融合
cv2.merge([channel_b, channel_g, channel_r])
几何图像绘制
dict字典格式预设颜色
COLOR_MAP = {
"blue": (255, 0, 0),
"green": (0, 255, 0),
"red": (0, 0, 255)
}
直线 cv2.line
绘制一根蓝色的线 宽度为2
cv2.line(img=canvas, pt1=(300, 0), pt2=(0, 300), color=COLOR_MAP[“blue”], thickness=2)
参数说明
img
图片(画布)
pt1
直线起始端坐标 (x, y)
pt2
直线结束端坐标 (x, y)
color
颜色
thickness
线宽
#可以简写为:
cv2.line(canvas, (300, 0), (0, 300), COLOR_MAP["red"], 3)
矩形 cv2.rectangle
# 绘制一个边缘宽度为5的矩形
cv2.rectangle(img=canvas, pt1=(50, 200), pt2=(200, 225), color=COLOR_MAP["green"], thickness=5)
thickness
边框宽度 , -1 代表填充
圆形 cv2.circle
cv2.circle(img=canvas, center=(150, 150), radius=60, color=(0, 0, 255), thickness=5)
center
圆形中心坐标
radius
圆形半径
thickness
线宽, -1 代表填充
椭圆形 cv2.ellipse
cv2.ellipse(img=canvas,center=(256,256), axes=(100,50), angle=0, startAngle=0, endAngle=360, color=(100, 200, 0), thickness=-1)
center
椭圆中心
axes
(长轴长度, 短轴长度)
angle
旋转角度
startAngle
开始角度
endAngle
结束角度
thickness
边的宽度, -1代表填充
边形绘制 cv2.polylines
传入的点集需要满足的条件为:维度是N×1×2
例如:
“`
[[[100 50]]
[[200 300]]
[[700 200]]
[[500 100]]]
```
cv2.polylines(img=canvas, pts=[points], isClosed=True, color=(0,0,255), thickness=3)
pts
点集
isClosed
是否闭合 , 若闭合的话, 将第一个与最后一个链接起来
thickness
宽度, 如果是-1就会填充(如果是闭合图像的话)
文字绘制 cv.text
# 选择字体
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(canvas, text="HelloWorld", org=(50, 200), fontFace=font, fontScale=2, thickness=1, lineType=cv2.LINE_AA, color=(0, 0, 255))
text
: 要写入的文本
org
: 文本左下角在图像中的位置
fontFace
: 文本字体
fontScale
: 文本的放大倍数
tickness
: 文本宽度
lineType
: 线条样式
color
: 颜色
我特别zz的画了一只哆唻A梦
import cv2
import numpy as np
def new_canvas(w,h,color=(255,255,255)):
canvas=np.ones((h, w, 3), dtype="uint8")
canvas[:]=color
return canvas
COLOR_MAP={"blue":(255,0,0),"green":(0,255,0),"red":(0,0,255),
"black":(0,0,0),'white':(255,255,255)}
p1=np.array([[49,257],[113,218],[179,263],[115,298]],np.int32)
p1=p1.reshape((-1,1,2))
canvas=new_canvas(300,300)
cv2.circle(img=canvas, center=(150, 150), radius=60, color=(0, 0, 0), thickness=5)
cv2.ellipse(canvas, center=(155, 150), axes=(120, 100), angle=0, startAngle=00, endAngle=360, color=(255, 115, 17), thickness=-1)
cv2.ellipse(canvas, center=(155, 170), axes=(100, 80), angle=0, startAngle=00, endAngle=360, color=(255, 255, 255), thickness=-1)
cv2.ellipse(canvas, center=(155, 150), axes=(120, 100), angle=0, startAngle=00, endAngle=360, color=(0, 0,0), thickness=2)
cv2.ellipse(canvas, center=(155, 170), axes=(100, 80), angle=0, startAngle=00, endAngle=360, color=(0, 0,0), thickness=2)
cv2.ellipse(canvas, center=(123, 95), axes=(27, 33), angle=0, startAngle=00, endAngle=360, color=(0, 0, 0), thickness=3)
cv2.ellipse(canvas, center=(178, 95), axes=(27, 33), angle=0, startAngle=00, endAngle=360, color=(0, 0, 0), thickness=3)
cv2.ellipse(canvas, center=(120, 93), axes=(27, 33), angle=0, startAngle=00, endAngle=360, color=(255, 255, 255), thickness=-1)
cv2.ellipse(canvas, center=(176, 93), axes=(27, 33), angle=0, startAngle=00, endAngle=360, color=(255, 255, 255), thickness=-1)
cv2.ellipse(canvas, center=(148, 136), axes=(20, 15), angle=0, startAngle=00, endAngle=360, color=COLOR_MAP['red'], thickness=-1)
cv2.ellipse(canvas, center=(148, 136), axes=(20, 15), angle=0, startAngle=00, endAngle=360, color=COLOR_MAP['black'], thickness=2)
cv2.line(img=canvas,pt1=(146,151),pt2=(146,200),color=COLOR_MAP['black'],thickness=2)
cv2.ellipse(canvas, center=(152, 215), axes=(70, 25), angle=0, startAngle=0, endAngle=360, color=(15,20,120), thickness=-1)
cv2.ellipse(canvas, center=(152, 215), axes=(70, 25), angle=0, startAngle=0, endAngle=360, color=(0,0,0), thickness=2)
cv2.ellipse(canvas, center=(152, 225), axes=(65, 17), angle=0, startAngle=0, endAngle=180, color=COLOR_MAP['white'], thickness=-1)
cv2.ellipse(canvas, center=(152, 220), axes=(40, 15), angle=0, startAngle=180, endAngle=360, color=(18,29,254), thickness=-1)
cv2.ellipse(canvas, center=(152, 220), axes=(40, 15), angle=0, startAngle=180, endAngle=360, color=(0,0,0), thickness=2)
cv2.line(img=canvas,pt1=(83,222),pt2=(222,222),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(157,70),pt2=(205,95),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(147,99),pt2=(125,84),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(147,99),pt2=(131,96),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(147,99),pt2=(124,105),color=COLOR_MAP['black'],thickness=2)
cv2.circle(img=canvas, center=(155, 84), radius=7, color=(0, 0, 0), thickness=-1)
cv2.ellipse(canvas, center=(155, 240), axes=(70, 10), angle=0, startAngle=0, endAngle=180, color=COLOR_MAP['red'], thickness=-1)
cv2.ellipse(canvas, center=(155, 240), axes=(70, 10), angle=0, startAngle=0, endAngle=180, color=COLOR_MAP['black'], thickness=2)
cv2.line(img=canvas,pt1=(94,240),pt2=(211,240),color=COLOR_MAP['red'],thickness=7)
cv2.line(img=canvas,pt1=(94,236),pt2=(211,236),color=COLOR_MAP['black'],thickness=2)
cv2.circle(img=canvas, center=(150, 258), radius=16, color=(15, 255, 255), thickness=-1)
cv2.circle(img=canvas, center=(150, 258), radius=16, color=(0,0,0), thickness=2)
cv2.circle(img=canvas, center=(150, 263), radius=4, color=(0,0,0), thickness=-1)
cv2.line(img=canvas,pt1=(150,260),pt2=(150,272),color=COLOR_MAP['black'],thickness=2)
cv2.ellipse(canvas, center=(150, 225), axes=(50, 30), angle=0, startAngle=70, endAngle=110, color=(0,0,0), thickness=2)
cv2.line(img=canvas,pt1=(119,149),pt2=(82,141),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(116,158),pt2=(81,165),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(119,169),pt2=(79,180),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(171,152),pt2=(210,135),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(175,161),pt2=(220,158),color=COLOR_MAP['black'],thickness=2)
cv2.line(img=canvas,pt1=(169,172),pt2=(218,176),color=COLOR_MAP['black'],thickness=2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(canvas, text="Hello Doraemon", org=(30, 280), fontFace=font, fontScale=1, thickness=1, lineType=cv2.LINE_AA, color=(0, 0, 255))
cv2.imshow("Canvas", canvas)
cv2.waitKey(0)