當前位置:
首頁 >
【图像处理】——遍历图像所有像素的方法(for 循环和np.where遍历)应用在模板制作
發布時間:2023/12/10
18
豆豆
生活随笔
收集整理的這篇文章主要介紹了
【图像处理】——遍历图像所有像素的方法(for 循环和np.where遍历)应用在模板制作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
具體np.where的用法可以參見:
其他遍歷圖像的所有像素的方法:
模板制作流程
Python代碼
具體np.where的用法可以參見:
https://blog.csdn.net/YH_24H/article/details/108368994
其他遍歷圖像的所有像素的方法:
https://blog.csdn.net/gdut2015go/article/details/49282031
模板制作流程
Python代碼
import cv2 import numpy as np import time #背景圖 start = time.time() bg = cv2.imread('bg.jpg',0) #含目標的圖 bgWithObj = cv2.imread('bgWithObj.jpg',0) #差分圖 diffImg = bg - bgWithObj #利用最大類間差法獲得閾值,以及二值圖 ret, binary = cv2.threshold(diffImg, 0, 255, cv2.THRESH_OTSU) #考慮到噪聲的影響,利用形態學操作對二值圖進行濾波 binaryDilate = cv2.dilate(binary,kernel=None,iterations=6)#先進行5次膨脹操作,去掉二值圖中目標物中的噪點 binaryErode = cv2.erode(binaryDilate,kernel=None,iterations=20)#再通過腐蝕去掉背景中的白點 #根據上面的二值圖變成標記圖,255設置為1,0設置為0 h,w = binaryErode.shape print(h,w) imgTag = np.zeros((h,w),np.uint8) ##通過np.where來遍歷滿足像素的坐標 xy = np.where(binaryErode==255)#返回滿足像素值等于255的行列號,xy[0]為行,xy[1]為列 print(len(xy[0])) for i in range(len(xy[0])):imgTag[xy[0][i],xy[1][i]] = 1 ##for循環直接遍歷的效率低 # for i in range(h): # for j in range(w): # if binaryErode[i,j] == 255: # imgTag[i,j] = 1 # else: # imgTag[i,j] = 0 #將得到的標記掩膜圖像與含目標圖進行相乘 Template = imgTag*bgWithObj cv2.namedWindow('diffImg',0) cv2.namedWindow('imgTag',0) cv2.namedWindow('binary',0) cv2.namedWindow('Template',0) cv2.imshow('diffImg',diffImg) cv2.imshow('binary',binaryErode) cv2.imshow('imgTag',imgTag) cv2.imshow('Template',Template) end = time.time() print(end - start) cv2.waitKey(0)np.where用時:2.8017001152038574ms(用時比較穩定)
for循環用時:56.08514666557312ms反正就是很慢
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【图像处理】——遍历图像所有像素的方法(for 循环和np.where遍历)应用在模板制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库中的多表查询总结
- 下一篇: 【图像处理】——上采样、下采样、在模板匹