OpenCV练习:尝试同时提取多个不同的颜色物体,比如同时提取红,蓝,绿三个不同颜色的物体。

python:

1.先是通过

import cv2
import numpy as np

red = np.uint8([[[255,0,0]]])
hsv_red=cv2.cvtColor(red,cv2.COLOR_BGR2HSV)
print hsv_red

green=np.uint8([[[0,255,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print hsv_green

blue = np.uint8([[[0,0,255]]])
hsv_blue=cv2.cvtColor(blue,cv2.COLOR_BGR2HSV)
print hsv_blue

得出红绿蓝的HSV值。结果是:

注意此时的值是在OpenCV的条件下得出,则默认是使用BGR的顺序。

2.通过代码实现同时提取红,蓝,绿三个不同颜 色的物体的功能。

#coding=utf-8</code>
import cv2
import numpy as np

cap=cv2.VideoCapture(0)
while(1):
	# 获取每一帧
	ret,frame=cap.read()
	# 转换到 HSV
	hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
	# 设定阈值,注意这里使用的numpy所以回到了RGB的顺序,之前在BGR状态下阈值是0-120,故现在是60-180
	lower_blue=np.array([60,100,100])
	upper_blue=np.array([180,255,255])
	# 根据阈值构建掩模
	mask=cv2.inRange(hsv,lower_blue,upper_blue)
	# 对原图像和掩模进行位运算
	res=cv2.bitwise_and(frame,frame,mask=mask)
	# 显示图像
	cv2.imshow('frame',frame)
	cv2.imshow('mask',mask)
	cv2.imshow('res',res)
	k=cv2.waitKey(5)&0xFF
	if k==27:
		break
# 关闭窗口
cv2.destroyAllWindows()

实现结果:

 

OpenCV提取不同颜色物体通常涉及颜色空间的转换和颜色阈值的应用。以下是使用OpenCV提取不同颜色物体的一般步骤: 1. **读取图像**:首先,使用OpenCV的函数读取你想要处理的图像。 2. **转换颜色空间**:由于RGB颜色空间并不适合颜色分割,通常会将图像从RGB颜色空间转换到HSV(Hue, Saturation, Value)或Lab颜色空间。这些颜色空间能够更好地分离颜色信息。 3. **定义颜色范围**:在HSV或Lab颜色空间中定义你想要提取颜色的范围。这通常通过设定Hue、Saturation、Value(或Lab中的L*a*b*)的上下界来完成。 4. **创建掩码**:使用cv2.inRange()函数根据定义的颜色范围创建一个二值掩码。在这个掩码中,目标颜色的像素会被标记为白色(通常是255),其他颜色的像素会被标记为黑色(通常是0)。 5. **应用掩码**:使用cv2.bitwise_and()函数将掩码应用到原始图像上,这样就只保留了目标颜色的区域,其他区域会被置为黑色。 6. **处理结果**:处理后的图像可以进一步进行形态学操作(如开运算、闭运算)以去除噪点或填补物体中的小洞。 下面是一个简单的Python代码示例,展示了如何使用OpenCV提取物体: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.jpg') # 将图像从BGR颜色空间转换到HSV颜色空间 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 定义色在HSV空间中的范围 lower_red = np.array([0, 120, 70]) upper_red = np.array([10, 255, 255]) # 创建色的掩码 mask = cv2.inRange(hsv, lower_red, upper_red) # 将掩码应用到原始图像上 result = cv2.bitwise_and(image, image, mask=mask) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Red Mask', mask) cv2.imshow('Red Extracted', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,`lower_red` 和 `upper_red` 定义了色的范围,这些值可能需要根据实际情况进行调整。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LebronChen666

感谢码友们的支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值