我有以下代碼片段:
amountLst = []
for i in range(9):
hsv = ""
if i == 0:
hsv = cv2.cvtColor(barc0Img, cv2.COLOR_BGR2HSV)
elif i == 1:
hsv = cv2.cvtColor(barc1Img, cv2.COLOR_BGR2HSV)
elif i == 2:
hsv = cv2.cvtColor(barc2Img, cv2.COLOR_BGR2HSV)
elif i == 3:
hsv = cv2.cvtColor(barc3Img, cv2.COLOR_BGR2HSV)
elif i == 4:
hsv = cv2.cvtColor(barc4Img, cv2.COLOR_BGR2HSV)
elif i == 5:
hsv = cv2.cvtColor(barc5Img, cv2.COLOR_BGR2HSV)
elif i == 6:
hsv = cv2.cvtColor(barc6Img, cv2.COLOR_BGR2HSV)
elif i == 7:
hsv = cv2.cvtColor(barc7Img, cv2.COLOR_BGR2HSV)
elif i == 8:
hsv = cv2.cvtColor(barc8Img, cv2.COLOR_BGR2HSV)
lower_bound = np.array([0, 80, 80])
upper_bound = np.array([20, 255, 255])
mask = cv2.inRange(hsv, lower_bound, upper_bound)
amountLst.append(mask)
如您所見,我正在檢查它的值i并根據它選擇適當的 hsv。有沒有更好的方法通過避免多個 if 陳述句來做到這一點。謝謝
uj5u.com熱心網友回復:
您可以使用包含以下內容的串列barc<int>Img:
barcImg = [
barc0Img,
barc1Img,
barc2Img,
...
]
amountLst = []
for i in range(9):
hsv = cv2.cvtColor(barcImg[i], cv2.COLOR_BGR2HSV)
lower_bound = np.array([0, 80, 80])
upper_bound = np.array([20, 255, 255])
mask = cv2.inRange(hsv, lower_bound, upper_bound)
amountLst.append(mask)
uj5u.com熱心網友回復:
首先將您的 barcXImg 參考放入串列中:
barcImages = [barc0Img, barc1Img, barc2Img, barc3Img, barc4Img, barc5Img, barc6Img, barc7Img, barc8Img]
只計算一次你的上限和下限(因為它們似乎不依賴于其他任何東西):
lo = np.array([0, 80, 80])
hi = np.array([20, 255, 255])
然后你可以用理解來構建你的串列:
amountLst = [cv2.inRange(cv2.cvtColor(img, cv2.COLOR_BGR2HSV), lo, hi) for img in barcImages]
uj5u.com熱心網友回復:
我建議你創建一個模擬 switch-case 的函式
def switch(argument):
switcher = {
0: cv2.cvtColor(barc0Img, cv2.COLOR_BGR2HSV),
1: cv2.cvtColor(barc1Img, cv2.COLOR_BGR2HSV),
2: cv2.cvtColor(barc2Img, cv2.COLOR_BGR2HSV),
3: cv2.cvtColor(barc3Img, cv2.COLOR_BGR2HSV),
4: cv2.cvtColor(barc4Img, cv2.COLOR_BGR2HSV),
5: cv2.cvtColor(barc5Img, cv2.COLOR_BGR2HSV),
6: cv2.cvtColor(barc6Img, cv2.COLOR_BGR2HSV),
7: cv2.cvtColor(barc7Img, cv2.COLOR_BGR2HSV),
8: cv2.cvtColor(barc8Img, cv2.COLOR_BGR2HSV),
}
return switcher.get(argument, "nothing")
amountLst = []
argument = yourArgument # 0,1,2,3,....
hsv = switch(argument)
lower_bound = np.array([0, 80, 80])
upper_bound = np.array([20, 255, 255])
mask = cv2.inRange(hsv, lower_bound, upper_bound)
amountLst.append(mask)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449346.html
下一篇:python:在多個變數中查找值
