python+opencv图像投影、水平投影、垂直投影
生活随笔
收集整理的這篇文章主要介紹了
python+opencv图像投影、水平投影、垂直投影
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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 #初始化一個跟圖像高一樣長度的數(shù)組,用于記錄每一行的黑點個數(shù)
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 #該行的計數(shù)器加一
17 img1[i,j]=255 #將其改為白點,即等于255
18 for i in range(0,h): #遍歷每一行
19 for j in range(0,a[i]): #從該行應(yīng)該變黑的最左邊的點開始向最右邊的點設(shè)置黑點
20 img1[i,j]=0 #設(shè)置黑點
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 #初始化一個跟圖像寬一樣長度的數(shù)組,用于記錄每一列的黑點個數(shù)
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 #該列的計數(shù)器加1
17 img2[j,i]=255 #記錄完后將其變?yōu)榘咨吹扔?55
18 for i in range(0,w): #遍歷每一列
19 for j in range(h-a[i],h): #從該列應(yīng)該變黑的最頂部的開始向最底部設(shè)為黑點
20 img2[j,i]=0 #設(shè)為黑點
21 cv.imshow("img",img2)
22 cv.waitKey(0)
23 cv.destroyAllWindows()
效果圖:
四、經(jīng)驗分享
(1)直接調(diào)用圖像的寬會報錯
解決方法:給圖像的高和寬一個返回值,調(diào)用返回值
(2)二值化處理使用cv.THRESH_BINARY_INV函數(shù),會導致實際效果圖與理想效果圖不一致。
解決方法;將二值化處理的函數(shù)改為cv.THRESH_BINARY
總結(jié)
以上是生活随笔為你收集整理的python+opencv图像投影、水平投影、垂直投影的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怪兽充电宝丢了怎么办(奥特曼系列截止到2
- 下一篇: 利用python爬虫(part5)--l