• python+opencv图像投影、水平投影、垂直投影


    python+opencv图像投影

    一、图像投影

    水平投影:以y轴为轴投影

    垂直投影:以x轴为轴投影

    原图:

    二、水平投影

    代码及解释:

     1 #水平投影
     2 import numpy as np
     3 import cv2 as cv 
     4 img=cv.imread("123.jpg",0)
     5 ret,img1=cv.threshold(img,80,255,cv.THRESH_BINARY)
     6 
     7 #返回图像的高和宽
     8 (h,w)=img1.shape
     9 
    10 #初始化一个跟图像高一样长度的数组,用于记录每一行的黑点个数
    11 a=[0 for z in range(0,h)]
    12 
    13 for i in range(0,h):          #遍历每一行
    14     for j in range(0,w):      #遍历每一列
    15         if img1[i,j]==0:      #判断该点是否为黑点,0代表黑点
    16             a[i]+=1           #该行的计数器加一
    17             img1[i,j]=255     #将其改为白点,即等于255
    18 for i in range(0,h):          #遍历每一行
    19     for j in range(0,a[i]):   #从该行应该变黑的最左边的点开始向最右边的点设置黑点
    20         img1[i,j]=0           #设置黑点
    21 cv.imshow("img",img1) 
    22 cv.waitKey(0) 
    23 cv.destroyAllWindows() 

    效果图:

    三、垂直投影

    代码及解释:

     1 #垂直投影
     2 import numpy as np
     3 import cv2 as cv 
     4 img=cv.imread("123.jpg",0)
     5 ret,img1=cv.threshold(img,80,255,cv.THRESH_BINARY)
     6 
     7 #返回图像的高和宽
     8 (h,w)=img1.shape
     9 
    10 #初始化一个跟图像宽一样长度的数组,用于记录每一列的黑点个数
    11 a =[0 for z in range(0,w)]
    12 
    13 for i in range(0,w):           #遍历每一列  
    14     for j in range(0,h):       #遍历每一行
    15         if img2[j,i]==0:       #判断该点是否为黑点,0代表是黑点
    16             a[i]+=1            #该列的计数器加1
    17             img2[j,i]=255      #记录完后将其变为白色,即等于255
    18 for i in range(0,w):           #遍历每一列
    19     for j in range(h-a[i],h):  #从该列应该变黑的最顶部的开始向最底部设为黑点
    20         img2[j,i]=0            #设为黑点
    21 cv.imshow("img",img2) 
    22 cv.waitKey(0) 
    23 cv.destroyAllWindows()

    效果图:

    四、经验分享

    (1)直接调用图像的宽会报错

    解决方法:给图像的高和宽一个返回值,调用返回值

    (2)二值化处理使用cv.THRESH_BINARY_INV函数,会导致实际效果图与理想效果图不一致。

    解决方法;将二值化处理的函数改为cv.THRESH_BINARY

  • 相关阅读:
    restframework 使用OrderingFilter实现排序
    restframework 使用django_filters 实现过滤
    Serializer 嵌套使用
    docker 运行scrpyd
    flutter-lol云顶之弈助手app
    微信小程序上传多张图片,后端只保存了最后一张的Bug
    ettercap局域网arp欺骗,轻松窃密
    GoLang邮件发送Demo(继上篇msmtp)
    Mac下命令行发邮件【搭配php(shell_exec...)等脚本语言,轻松发邮件,告别各种依赖库】
    我的第一个RN应用(漂亮的首页和笑话列表)
  • 原文地址:https://www.cnblogs.com/cyt99/p/12466512.html
Copyright © 2020-2023  润新知