我正在尝试添加一个 opencv 轨迹栏来调整我用于二进制掩模图像的圆半径值。
问题是 bitwise_and 或 bitwise_or twe 参数结果是相同的。
掩模图像解释一下。| ||这是我的代码:
Here's my code:
---python
#import opencv and numpy
import cv2
import numpy as np
#Blank Image created
img = np.ones((300,500,3),np.uint8)*255
#Masking Image Created
mask = np.ones((300,500,3),np.uint8)*255
cv2.imshow('img', img)
cv2.imshow('mask', mask)
#Windows name
cv2.namedWindow('imaginary')
def test(args):
pass
#Trackbar callback
cv2.createTrackbar('circl', 'imaginary', 50, 200, test)
#bitwise_and
while True:
ri = cv2.getTrackbarPos('circl', 'imaginary')
#Circle Radius.
img1 = cv2.circle(img,(250,150),ri,(0,0,255),-1)
cv2.imshow('xyz', img1)
#bitwise_and
ii = cv2.bitwise_and(mask,mask,img1)
# or #
ii = cv2.bitwise_or(mask,mask,img1)
cv2.imshow('ii', ii)
k = cv2.waitKey(1)
if k == 27: # 27 is Escape
break
#Destroy All open Windows
cv2.destroyAllWindows()
---
你代码的问题在于你误解了
cv2.bitwise_and()
和
cv2.bitwise_or()
函数的用法。虽然这些函数可以用于掩蔽操作,但你并没有正确地将它们应用于你的代码中。
第三个参数是可选的掩码,
应用于
第一个和第二个输入数组(在你的例子中是相同的
mask
)。你没有为第三个参数提供掩码,而是提供了你想要应用掩码的图像 (
img1
)。
为了获得你想要的行为,你应该:
- 在你的主图像上绘制圆形作为掩码: 这意味着创建一个单独的黑色图像,并在该图像上绘制你的圆形。
-
对主图像和掩码使用
cv2.bitwise_and()
: 这将在圆形区域内显示主图像,而在其他地方显示黑色。
以下是你修改后的代码:
# 导入 opencv 和 numpy
import cv2
import numpy as np
# 创建空白图像
img = np.ones((300,500,3),np.uint8)*255
# 创建掩码图像
mask = np.zeros((300,500,3),np.uint8)
# 窗口名称
cv2.namedWindow('imaginary')
def test(args):
pass
# 创建轨迹条
cv2.createTrackbar('circl', 'imaginary', 50, 200, test)
while True:
ri = cv2.getTrackbarPos('circl', 'imaginary')
# 创建一个黑色图像并在其上绘制圆形作为掩码
mask[:] = 0 # 确保掩码是黑色的
cv2.circle(mask,(250,150),ri,(255,255,255),-1)
# 对主图像和掩码使用 bitwise_and
result = cv2.bitwise_and(img, mask)
cv2.imshow('xyz', mask)
cv2.imshow('ii', result)
k = cv2.waitKey(1)
if k == 27: # 27 是 Escape
break
# 销毁所有打开的窗口
cv2.destroyAllWindows()
在这个修改后的代码中,我们创建了一个单独的
mask
图像,并在每次迭代中在其上绘制圆形。然后,我们使用
cv2.bitwise_and()
将此掩码应用于主图像,从而得到你想要的结果。
希望这对你有帮助!如果你还有其他问题,请告诉我。
标签:python,numpy,opencv,bitwise-and,bitwise-or From: 78781706