python - cv2.putText 文本在下一个 cv2.read 后保留在图像中
问题描述
我正在为我的硕士论文编写一些代码。有两个线程,一个执行 cv2.VideoCapture(),设置就绪 Event(),在第二个线程中,while 循环等待设置事件,然后进行一些图像处理。典型的生产者、消费者问题。
问题是,我正在尝试创建场景的“模型”,我只会在没有红色圆圈的区域更新像素,我将其用作检测对象位置的标记。我需要记住红色标记后面的部分图像,然后在其他地方更新区域。
问题是,我需要标记红色圆圈的中心。我使用 cv2.circle()。黑点不知何故进入了模型,尽管我从来没有把它放在那里。cv2.putText() 函数也有同样的问题。代码看起来像这样。
if __name__ == "__main__":
ready = Event()
vs = VideoStream(0, ready).start()
v = Vision(vs.read())
cv2.imshow('firework', v.getImg())
while cv2.getWindowProperty('firework', cv2.WND_PROP_VISIBLE) >= 1:
# data acquisition
while not ready.isSet():
pass
img = vs.read()
ready.clear()
# image processing
v.updateImg(img)
v.detectRedMarker() # set cX, cY
mask = v.getROIMask(radius=100)
v.updateModel(mask) # circle mask, center cX, cY
# extras
img = v.putMarkerToImg(img)
cv2.imshow('firework', img)
if cv2.waitKey(1) == ord(' '):
break
vs.stop()
Vision 类中的方法...
def updateImg(self, img):
self.img = img
self.imgGray = cv2.cvtColor(self.img,cv2.COLOR_BGR2GRAY)
return
def getROIMask(self,radius):
mask = np.zeros((self.imgHeight, self.imgWidth),np.uint8)
cv2.circle(mask, (self.cX, self.cY), radius, 1, thickness=-1)
return mask
def updateModel(self,mask):
modelUpdate = cv2.bitwise_and(self.imgGray, cv2.bitwise_not(mask*255))
modelOld = cv2.bitwise_and(self.model, (mask*255))
self.model = cv2.add(modelOld,modelUpdate)
return
如您所见,我在更新模型后将点放在红色标记的中心,然后在下一次迭代中读取新图像。黑点不知何故进入了模型。谁能建议这是怎么发生的?
解决方案
推荐阅读
- c# - 如何在 zip 文件中设置密码
- javascript - 发出护照Oauth github请求时的GET,HEAD响应
- node.js - 如何使用 Node JS 在 Parse 中插入记录?
- android - MediaStore.Images.Media.getBitmap 为 uri 返回 null
- python - ArangoDBs python 码头工人
- wordpress - 博客网站如何知道网站是否可以使用 AMP 计算
- docusignapi - DocuSign 标准帐户 - 集成密钥
- android - 将焦点转移到该组件时更改 ImageView 或 Button 的不透明度
- docker - 当我同时使用主机卷(绑定挂载)和命名卷(一种 docker 管理卷)时会发生什么?
- django - DRF 序列化程序检查未定义字段