如何定义两种不同颜色的"下"和"上"范围,例如红色和蓝色(因为红色和蓝色在HSV颜色中彼此不相邻)
这个属于红色:
lower_red = np.array([160,20,70])
upper_red = np.array([190,255,255])
Run Code Online (Sandbox Code Playgroud)
这个属于蓝色:
lower_blue = np.array([101,50,38])
upper_blue = np.array([110,255,255])
Run Code Online (Sandbox Code Playgroud)
我尝试使用if条件将它们组合起来或制作自己的功能但不起作用,你们能告诉我解决方案吗?
P/s:Python中的OpenCV
我想确定此(静态视频)图像中注射器尖端的中心位置。尖端名义上是圆形的并且具有已知的尺寸和数量。
我目前正在笔尖上涂上红色墨水,以便更容易检测到它们。如果不必这样做就好了,但我认为如果没有它,检测将会非常困难。有人喜欢挑战吗?
我开始尝试 SimpleBlobDetector,因为它有一些很好的过滤功能。我无法弄清楚的一件事是如何让 SimpleBlobDetector 检测空心圆(环)?
然后我尝试了canny + hough,但圆检测太不稳定,位置跳来跳去。
我目前正在使用 findContours + minEnendingCircle ,它工作正常,但仍然很不稳定。面具看起来像这样。结果。 可以看到准确率不是很高:
我简单地查看了 RANSAC,但找不到可以检测多个圆的 Python 示例,而且边缘检测很棘手。
我当前的代码:
# /sf/ask/2276609261/
frame_inv = ~frame0
# Convert BGR to HSV
hsv = cv2.cvtColor(frame_inv, cv2.COLOR_BGR2HSV)
blur = cv2.GaussianBlur(hsv, (5, 5), 0)
# define range of color in HSV
lower_red = np.array([90 - 10, 70, 50])
upper_red = np.array([90 + 10, 255, 255])
# Threshold the HSV image to get only red colors
mask = cv2.inRange(hsv, …Run Code Online (Sandbox Code Playgroud) 我试图确定图片的一部分是否包含红白条纹对象(liftramp).如果它存在,它看起来像这样:
,当不是这样的时候: 
天真的方法是提取直方图,并计算红色像素是否多于蓝色/绿色像素:
use Image::Magick;
my $image = Image::Magick->new;
my $rv = $image->Read($picture);
#$rv = $image->Crop(geometry=>'26x100+484+40');
my @hist_data = $image->Histogram;
my @hist_entries;
# Histogram returns data as a single list, but the list is actually groups of 5 elements. Turn it into a list of useful hashes.
while (@hist_data) {
my ($r, $g, $b, $a, $count) = splice @hist_data, 0, 5;
push @hist_entries, { r => $r, g => $g, b => $b, alpha => $a, count => $count }; …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个我检测到红色的程序.但是有时它比平时更暗,所以我不能只使用一个值.什么是检测不同色调红色的好范围?我目前使用的范围是128,0,0 - 255,60,60,但有时它甚至都没有检测到我放在它前面的红色物体.