【cv笔记1】基本操作

写的很乱,用手机看的话阅读体验可能不是很好

读图并显示

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,3001],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)

猜你喜欢

转载自blog.csdn.net/afeiererer/article/details/79492933