gpt4 book ai didi

python - 如何提取图像中的绿色对象?

转载 作者:太空狗 更新时间:2023-10-29 20:17:54 26 4
gpt4 key购买 nike

我对图像中对象周围的边界框进行了 ROI。 ROI 由 Faster R-CNN 获得。现在我想要获取包含在边界框内的绿色尖峰对象。

Test Image

获得 ROI 后,我将图像中的 ROI 分割到一张相同大小的黑色图像上,从而得到下图

image containing only bounding boxes

如您所见,盒子是矩形的,因此在某些地方它会覆盖一些背景区域以及尖峰。那么,我如何应用阈值来仅获取尖峰并将其他像素更改为黑色?

最佳答案

使用 cv2.inRange() 进行颜色阈值处理应该在这里工作。我假设你想隔离绿色区域

这是主要思想

  • 将图像转换为 HSV 格式,因为它比 RBG 更容易表示颜色
  • 使用较低/较高阈值执行颜色分割

您还可以执行 morphological operations获取mask后平滑或去除噪声


enter image description here

import numpy as np
import cv2

image = cv2.imread('1.jpg')
result = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([18, 0, 0])
upper = np.array([179, 255, 255])
mask = cv2.inRange(image, lower, upper)
result = cv2.bitwise_and(result,result, mask=mask)
cv2.imshow('result', result)
cv2.imwrite('result.png', result)
cv2.waitKey()

您可以使用 HSV 颜色阈值脚本来隔离所需的颜色范围

enter image description here

import cv2
import sys
import numpy as np

def nothing(x):
pass

# Create a window
cv2.namedWindow('image')

# create trackbars for color change
cv2.createTrackbar('HMin','image',0,179,nothing) # Hue is from 0-179 for Opencv
cv2.createTrackbar('SMin','image',0,255,nothing)
cv2.createTrackbar('VMin','image',0,255,nothing)
cv2.createTrackbar('HMax','image',0,179,nothing)
cv2.createTrackbar('SMax','image',0,255,nothing)
cv2.createTrackbar('VMax','image',0,255,nothing)

# Set default value for MAX HSV trackbars.
cv2.setTrackbarPos('HMax', 'image', 179)
cv2.setTrackbarPos('SMax', 'image', 255)
cv2.setTrackbarPos('VMax', 'image', 255)

# Initialize to check if HSV min/max value changes
hMin = sMin = vMin = hMax = sMax = vMax = 0
phMin = psMin = pvMin = phMax = psMax = pvMax = 0

img = cv2.imread('1.jpg')
output = img
waitTime = 33

while(1):

# get current positions of all trackbars
hMin = cv2.getTrackbarPos('HMin','image')
sMin = cv2.getTrackbarPos('SMin','image')
vMin = cv2.getTrackbarPos('VMin','image')

hMax = cv2.getTrackbarPos('HMax','image')
sMax = cv2.getTrackbarPos('SMax','image')
vMax = cv2.getTrackbarPos('VMax','image')

# Set minimum and max HSV values to display
lower = np.array([hMin, sMin, vMin])
upper = np.array([hMax, sMax, vMax])

# Create HSV Image and threshold into a range.
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower, upper)
output = cv2.bitwise_and(img,img, mask= mask)

# Print if there is a change in HSV value
if( (phMin != hMin) | (psMin != sMin) | (pvMin != vMin) | (phMax != hMax) | (psMax != sMax) | (pvMax != vMax) ):
print("(hMin = %d , sMin = %d, vMin = %d), (hMax = %d , sMax = %d, vMax = %d)" % (hMin , sMin , vMin, hMax, sMax , vMax))
phMin = hMin
psMin = sMin
pvMin = vMin
phMax = hMax
psMax = sMax
pvMax = vMax

# Display output image
cv2.imshow('image',output)

# Wait longer to prevent freeze for videos.
if cv2.waitKey(waitTime) & 0xFF == ord('q'):
break

cv2.destroyAllWindows()

这是原始图像的结果

enter image description here

关于python - 如何提取图像中的绿色对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57585944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com