zoukankan      html  css  js  c++  java
  • Python OpenCV 实现图片投影

    一、实验目的

    通过OpenCV第四次进行实验,对图片进行投影。

    二、实验内容

    对图片进行投影。

    三、实验过程

    我使用的是python语言+openCV来实现图片投影的功能。使用的测试图片如下:

     

    3.1测试图片

     

    使用imread()函数读取图片,imshow()函数显示图片,waitKey()函数含义为按下任意键继续;

    实例代码:

    #灰度化读取图片

    img = cv2.imread('123.jpg', cv2.COLOR_BGR2GRAY)

    cv2.imshow("img",img)

    cv2.waitKey(0)

     

    3.2读取的图片

     

    二值化代码:

    (_, thresh) = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)

    closed = cv2.erode(thresh, None, iterations = 5)

    cv2.imshow('img',closed)

    height, width = closed.shape[:2]

    v = [0]*width

    z = [0]*height

    a = 0

    垂直投影代码:

    #垂直投影

    #统计并存储每一列的黑点数

    for x in range(0, width):               

        for y in range(0, height):

            if closed[y,x][0] == 0:

                a = a + 1

            else :

                continue

        v[x] = a

        a = 0

    l = len(v)

    #创建空白图片,绘制垂直投影图

    emptyImage = numpy.zeros((height, width, 3), numpy.uint8)

    for x in range(0,width):

        for y in range(0, v[x]):

            b = (255,255,255)

            emptyImage[y,x] = b

    cv2.imshow('chuizhi', emptyImage)

     

    3.2垂直投影图

    水平投影代码:

    #水平投影

    #统计每一行的黑点数

    a = 0

    emptyImage1 = numpy.zeros((height, width, 3), numpy.uint8)

    for y in range(0, height):

        for x in range(0, width):

            if closed[y,x][0] == 0:

                a = a + 1

            else :

                continue

        z[y] = a

        a = 0

    l = len(z)

    #绘制水平投影图

    for y in range(0,height):

        for x in range(0, z[y]):

            b = (255,255,255)

            emptyImage1[y,x] = b

    cv2.imshow('shuiping', emptyImage1)

    cv2.waitKey(0)

     

    3.4水平投影图

    四、实验总结

    学习了OpenCV的图片投影一功能,途中未遇到问题,但是本学期学的是Python,我就在网上找的例子分析代码,也是很快就用Python的代码做出来了此题,锻炼了自己的能力。

  • 相关阅读:
    利用python做矩阵的简单运算(行列式、特征值、特征向量等的求解)
    numpy.linalg.svd函数
    梯度裁剪(Clipping Gradient):torch.nn.utils.clip_grad_norm
    tf.matmul()报错expected scalar type Float but found Double
    1283 最小周长
    1182 完美字符串
    1091 线段的重叠
    1090 3个数和为0
    1087 1 10 100 1000
    1083 矩阵取数问题
  • 原文地址:https://www.cnblogs.com/CJR-QYF/p/12461768.html
Copyright © 2011-2022 走看看