opencv根据颜色抠图

代码只获取了红色,可以自行修改

第一个实现方法:np遍历

#include = utf-8
import cv2
import numpy as np
#读取图片
img = cv2.imread('lab_logo.jpg',1)
#选定区域进行更精细的操作
rio = img[590:1432,0:830]
#创建一个稍大于rio的画板
zero = np.zeros([850, 850, 3])
zero[:,:,:] = 255
#将红色区域从原图上拓印到画板上
raw = -1
for i in rio :
    raw+=1
    column = -1
    for p in i:
        column +=1
        if (90<p[2]<130 and p[0]<75 and p[1]<85) or (35<p[2]<60 and p[0]<30 and p[1]<30):
            zero[raw,column] = p
cv2.imwrite('result_1.jpg',zero)

第二个方法,opencv掩膜,速度很快

HSV空间:Hue 表示颜色,Saturation 表示颜色的饱和度,Brightness 是亮度
np.where()函数
1.np.where(condition,x,y) 当where内有三个参数时,第一个参数表示条件,当条件成立时where方法返回x,当条件不成立时where返回y
2.np.where(condition) 当where内只有一个参数时,那个参数表示条件,当条件成立时,where返回的是每个符合condition条件元素的坐标,返回的是以元组的形式

cv2.bitwise_and(src1, src2, dst=None, mask=None)      与运算
如果有掩膜的话,就会输出掩膜白色区域的图像,就是抠图

mask = cv2.inRange(rio,low_hsv,high_hsv)
需要一个hsv图片输入,然后将低于lower_red和高于upper_red的部分分别变成0,lower_red~upper_red之间的值变成255,非常好用地得到一个二值掩膜

 代码如下

#include = utf-8
import cv2
import numpy as np
#读取图片
img= cv2.imread('lab_logo.jpg',1)
#变hsv图
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#找到感兴趣区域
rio = hsv_img[590:1432,0:830]
#利用inrange得到掩膜
low_hsv = np.array([156,43,46])
high_hsv = np.array([180,255,255])
mask = cv2.inRange(rio,low_hsv,high_hsv)
#根据掩膜抠图
red = cv2.bitwise_and(rio, rio, mask=mask)
#还原成bgr图
bgr_red = cv2.cvtColor(red,cv2.COLOR_HSV2BGR)
#把黑色背景变成白色的
black_pixels = np.where((bgr_red[:, :, 0] == 0) &(bgr_red[:, :, 1] == 0) &(bgr_red[:, :, 2] == 0))
bgr_red[black_pixels] = [255,255,255]
#保存
cv2.imwrite('result_1.jpg',bgr_red)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值