像素的核算

像素值核算涉及到的知识点有以下几个

  • 最小(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()

OpenCV教程——图像统计信息; 图像几何形状绘制;随机数与随机颜色;多边形填充与绘制

图画几许形状制作

图画公共参数阐明

参数阐明

  • 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()

OpenCV教程——图像统计信息; 图像几何形状绘制;随机数与随机颜色;多边形填充与绘制

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 制作几许图画时,除了大多数情况下制作的简单形状,有时也需求制作复杂的多边形形状。下面就来一同测验如何制作多边形形状。

首先需求了解几个 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()

OpenCV教程——图像统计信息; 图像几何形状绘制;随机数与随机颜色;多边形填充与绘制