像素的核算
像素值核算涉及到的知识点有以下几个
- 最小(min)
- 最大(max)
- 均值(mean)
- 规范方差(standard deviation)
OpenCV相关的 API 知识点
- 最大最小值 minMaxLoc
- 核算均值与规范方差 meanStdDev
代码:
def stats_demo():
img = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(img)
print(minVal, maxVal, minLoc, maxLoc) # 0.0 255.0 (295, 110) (0, 0)
means, stddev = cv2.meanStdDev(img)
print(means, stddev) # [[226.50121333]] [[62.48617809]]
img[np.where(img < means)] = 0
img[np.where(img > means)] = 255
cv2.imshow("binary", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图画几许形状制作
图画公共参数阐明
参数阐明
- img 表明输入图画,答应单通道灰度图画或多通道五颜六色图画。
- color 表明制作直线的色彩,(b,g,r) 格局的元组,或许表明灰度值的标量。
- thickness 表明制作直线的粗细,默认值 1px,-1 表明内部填充。
- lineType 表明制作直线的线性,默以为 LINE_8。
- shift 表明点坐标的小数位数,默以为 0。
lineType 值阐明
- cv.FILLED 表明内部填充(实心图形)。
- cv.LINE_4 表明 4 邻接线型。
- cv.LINE_8 表明 8 邻接线型。
- cv.LINE_AA 表明抗锯齿线型,图画更滑润。
制作直线 cv.line 函数阐明
cv.line() 函数运用
cv.line(img, pt1, pt2, color[, thickness=1, lineType=LINE_8, shift=0]) → img
参数阐明
- img 表明输入图画,答应单通道灰度图画或多通道五颜六色图画。
- pt1 表明线段第一个点的坐标,(x1, y1)。
- pt2 表明线段第二个点的坐标,(x2, y2)。
- color 表明制作直线的色彩,(b,g,r) 格局的元组,或许表明灰度值的标量。
- thickness 表明制作直线的粗细,默认值 1px,-1 表明内部填充。
- lineType 表明制作直线的线性,默以为 LINE_8。
- shift 表明点坐标的小数位数,默以为 0。
留意
- 绘图操作会直接对传入的图画 img 进行修改,是否接受函数返回值都能够。
- 在制作直线时不能挑选填充线型 cv.FILLED ,不然会报错。
- 图画尺度较小时,LINE_4 线型存在显着的锯齿,LINE_AA 线型愈加滑润。
- 图画尺度较大时,则线型的影响并不大,引荐选用默认值 LINE_8。
- 假如设置了 thickness,关键词 lineType 能够省掉;假如没有设置 thickness,则关键词 lineType 不能省掉,不然输入的线型参数会被过错地解释为线宽。
制作圆形 cv.circle 函数阐明 cv.circle() 函数运用
cv.circle(img, center, radius, color[, thickness=1, lineType=LINE_8, shift=0]) → img
参数阐明
-
img 表明输入图画,答应单通道灰度图画或多通道五颜六色图画。
-
center 表明圆心点的坐标,(x, y) 格局的元组。
-
radius 表明圆的半径,整数。
-
color 表明制作直线的色彩,(b,g,r) 格局的元组,或许表明灰度值的标量。
-
thickness 表明制作直线的粗细,默认值 1px,-1 表明内部填充。
-
lineType 表明制作直线的线性,默以为 LINE_8。
-
shift 表明点坐标的小数位数,默以为 0。 留意
-
在单通道的灰度图画上只能制作灰度线条,不能制作五颜六色线条 。可是,线条色彩 color 能够是标量 b,也能够是元组 (b,g,r),都会被解释为灰度值 b。元组中的后两个通道的参数是无效的。
制作矩形 cv.rectangle 函数阐明
cv.rectangle() 函数运用
cv.rectangle(img, pt1, pt2, color[, thickness=1, lineType=LINE_8, shift=0]) → img
参数阐明
- img 表明输入图画,答应单通道灰度图画或多通道五颜六色图画。
- pt1 表明矩阵第一个点的坐标,(x1, y1) 格局的元组。
- pt2 表明与 pt1 成对角的矩阵第二个点的坐标,(x2, y2) 格局的元组。
- color 表明制作直线的色彩,(b,g,r) 格局的元组,或许表明灰度值的标量。
- thickness 表明制作直线的粗细,默认值 1px,-1 表明内部填充。
- lineType 表明制作直线的线性,默以为 LINE_8。
- shift 表明点坐标的小数位数,默以为 0。
留意
- 运用rec参数制作矩形,r.tl() 和 r.br() 是矩形的对角点。
制作椭圆 cv.ellipse 函数阐明
cv.ellipse() 函数运用
cv.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness=1, lineType=LINE_8, shift=0]) → img
参数阐明
- img 表明输入图画,答应单通道灰度图画或多通道五颜六色图画。
- center 表明椭圆的圆心点的坐标,(x, y) 格局的元组。
- axes 表明椭圆的轴长,格局为 (长轴长度的一半, 短轴长度的一半) 格局的元组。
- angle 表明椭圆沿水平方向逆时针旋转的视点。
- startAngle 表明沿长轴顺时针方向开始显现的视点。
- endAngle 表明沿长轴顺时针完毕显现的视点。
- color 表明制作直线的色彩,(b,g,r) 格局的元组,或许表明灰度值的标量。
- thickness 表明制作直线的粗细,默认值 1px,-1 表明内部填充。
- lineType 表明制作直线的线性,默以为 LINE_8。
- shift 表明点坐标的小数位数,默以为 0。
代码
代码:
def draw_demo():
canvas = np.zeros((512, 512, 3), dtype=np.uint8)
font_color = (140, 199, 0)
cv2.rectangle(canvas, (100, 100), (300, 300), font_color, 2, 8)
label_text = 'openCv'
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 0.5
thickness = 1
(fw, uph), dh = cv2.getTextSize(label_text, font, font_scale, thickness)
cv2.rectangle(canvas, (100, 100 - uph - dh), (100 + fw, 100), (255, 255, 255), -1, 8)
cv2.putText(canvas, label_text, (100, 100 - dh), font, font_scale, (255, 0, 255), thickness)
cv2.imshow('canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()
Python中的随机数函数
random.randint(low, high=None, size=Nonedtype=int)
Low表低值,high表明高值,size表明维度,dtype表明类型
np.random.randint(256)np.random.randint(0,256)表明发生0~255随机数,类型是int
np.random.randint(0, 256, size=3)
def noise_demo():
canvas=np.zeros((250,600,3),dtype=np.uint8)
img=cv2.imread('test.jpg')
print(img.shape)
cv2.randn(canvas,(120,100,140),(30,50,20))
dst=cv2.add(img,canvas)
cv2.imshow('add noise',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
多边形填充与制作
在运用 opencv 制作几许图画时,除了大多数情况下制作的简单形状,有时也需求制作复杂的多边形形状。下面就来一同测验如何制作多边形形状。
首先需求了解几个 opencv 库函数。
-
cv.polylines()
多边形制作
需求传入画布、概括点、是否闭合、制作色彩、线条粗细、线条类型、极点坐标小数位。 -
cv.fillPoly()
多边形填充
需求传入画布、概括点、填充色彩、线条类型、极点坐标小数位。 -
drawContours()
既能够填充也能够制作多边形
需求传入画布(三通道画布才能显现概括)、概括点、制作概括数(-1 表明制作其间的一切概括)、色彩、概括粗细(-1 表明填充)。
def polygon_drawing():
canvas = np.zeros((512, 512, 3), dtype=np.uint8)
# 定义多边形的极点
pts = np.array([[100, 100], [350, 100], [450, 280], [320, 450], [80, 400]], dtype=np.int32)
# 多边形制作
# cv.polylines(canvas, [pts], True, (0, 0, 255), 2, 8, 0)
# 多边形填充
# cv.fillPoly(canvas, [pts], (255, 0, 255), 8, 0)
# 既能够填充也能够制作形状, thickness为时制作形状,-1时填充形状
# 能够增加多个概括,用,号离隔,比如[pts1, pts2, ...]
cv.drawContours(canvas, [pts], -1, (255, 0, 0), thickness=-1)
cv.imshow('polyline', canvas)
cv.waitKey(0)
cv.destroyAllWindows()