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

摘要:
1#水平投影2importnumpyasnp3importcv2ascv4img=cv。imread(“123。jpg“,cv.THRESH_BINARY)67#返回图像的高度和宽度8(h,w)=img1。shape910#初始化长度与图像高度相同的数组,j]=0#设置黑点21cv。imshow(“img”,
python+opencv图像投影 一、图像投影

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

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

原图:

python+opencv图像投影、水平投影、垂直投影第1张

二、水平投影

代码及解释:

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

效果图:

python+opencv图像投影、水平投影、垂直投影第2张

三、垂直投影

代码及解释:

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

效果图:

python+opencv图像投影、水平投影、垂直投影第3张

四、经验分享

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

python+opencv图像投影、水平投影、垂直投影第4张

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

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

python+opencv图像投影、水平投影、垂直投影第5张

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

免责声明:文章转载自《python+opencv图像投影、水平投影、垂直投影》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇php 密码加密(password_hash)将Java项目打包成可以独立运行的Jar包下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1085:球弹跳高度的计算

时间限制: 1000 ms 内存限制: 65536 KB 提交数: 13220 通过数: 6964 【题目描述】 一球从某一高度h落下(单位米),每次落地后反跳回原来高度的一半,再落下。 编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高? 输出包含两行,第1行:到球第10次落地时,一共经过的米数。第2行:第10次弹跳的高度。 【输入】 输...

OpenGL(十二) 纹理映射(贴图)

OpenGL绘制纹理的步骤: 1. 开启纹理功能 使用glEnable(GL_TEXTURE_2D)开启2D纹理功能,使用glDisable(GL_TEXTURE_2D)关闭纹理,默认情况下纹理是关闭的。 2. 读取纹理图片到内存 读取的时候注意以下3点:  1) BMP文件数据前54位是文件头和信息头数据,偏移54位之后才是要读取的图像数...

帆软常用JS

1.鼠标移动图片放大 $("td[id^=A] img").mouseover(function(e){var col=Number($(this).attr("col"))+1; //获取鼠标当前所在单元格的col var row=$(this).attr("row"); //获取鼠标当前所在单元格的row var img=this.src; //获取到...

javascript 九宫格图片随机打乱位置

  今天就做个九宫格的简易拼图,最让我头疼的就是点击开始打乱图片位置。一开始在百度查看相关博客,走了很多弯路。最后看了众多的例子,自己写了个方法。 1 <script> 2 //打乱图片方法 3 function fun(){ 4 var x = []; 5 var y ; 6...

Dockerfile参考

Docker可以通过阅读a的指示自动构建图像Dockerfile。Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令。使用docker build用户可以创建一个自动构建,连续执行几条命令行指令。 该页面描述了您可以在Dockerfile中使用的命令。阅读本页后,请参阅Dockerfile面向提示的指南的最佳做法。 用法...

jquery幻灯片插件之owl.carousel.js

官网地址:http://owlcarousel2.github.io/OwlCarousel2/ 这个插件兼容各种浏览器,以及移动端 使用方法: 1、下载文件,解压以后,把dist里面的文件放到项目中 2、引入jquery文件,必须是1.8以上的 3、页面引入的文件: <link rel="stylesheet" href="http://t.zo...