gpt4 book ai didi

python-3.x - 基于rgb提取和沉降的opencv Python中的图像像素区分

转载 作者:太空宇宙 更新时间:2023-11-03 22:21:41 25 4
gpt4 key购买 nike

我使用的是 Pyton 版本 3.* 和 opencv 3.*。在下面的代码中,我想在角像素的基础上减去整个背景以获得前景对象

def background_subtract(img,l):
print("Extract the background pixel")
image = cv2.imread(img,cv2.IMREAD_ANYCOLOR)
r,g,b=image[0,0]
t,d,m= image.shape
for i in range(t):
for j in range(d):
r1,g1,b1=image[i,j]
if r1>=r:
r1=0
if g1>=g:
g1=0
if b1>=b:
b1=0
path='C:\\Users\\UST\\Desktop'
if not os.path.exists(path):
os.makedirs(path)
cv2.imwrite(os.path.join(path,'background_subtract%d.jpg' %l),image)
path =os.path.join(path,'%d.jpg' %l)
print(path)
return path

但是,我获取的不是减去的背景图像,而是原始图像。请帮忙

最佳答案

您正在操纵 rgb 值但未设置它们:

for i in range(t):
for j in range(d):
r1,g1,b1=image[i,j]
if r1>=r:
r1=0
if g1>=g:
g1=0
if b1>=b:
b1=0
image[i,j] = [r1,g1,b1] # this line is missing

也许还可以在这里阅读:Performance comparison of OpenCV-Python interfaces, cv and cv2

如果您熟悉 numpy,通过它可以更快地操作 cv2。

编辑:

但是你的方法会有问题,如果你的边框像素是亮红色 (255,0,0) 之后你的图片将有一个红色 channel 0,对于绿色和蓝色相同,因为你正在清零每个像素如果它“小于”边界上的 channel ,则为红色 channel 。

你可以玩玩

r,g,b=image[0,0]    # border pixel
delta = 10 # similarity to border pixel
r_range = range( r-delta, r+delta+1)
g_range = range( g-delta, g+delta+1)
b_range = range( b-delta, b+delta+1)

并检查您当前看到的像素的所有 3 个 rgb 是否都在 各自的范围内 - 如果是,将其设置为 [0,0,0]:

for i in range(t):
for j in range(d):
r1,g1,b1=image[i,j]
if r1 in r_range and g1 in g_range and b1 in b_range:
image[i,j] = [0,0,0]

关于python-3.x - 基于rgb提取和沉降的opencv Python中的图像像素区分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48395569/

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