首页 > 编程问答 >如何使用OpenCV轨迹栏控制圆半径?

如何使用OpenCV轨迹栏控制圆半径?

时间:2024-07-23 13:56:32浏览次数:10  
标签:python numpy opencv bitwise-and bitwise-or

我正在尝试添加一个 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 )。

为了获得你想要的行为,你应该:

  1. 在你的主图像上绘制圆形作为掩码: 这意味着创建一个单独的黑色图像,并在该图像上绘制你的圆形。
  2. 对主图像和掩码使用 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

相关文章

  • Python字符串:提取重复和随机合并的子字符串
    重复和合并字符串的示例:16.01068.0%08p%.a.p.a.要提取的所需子字符串:16.008%p.a.完整示例:CCoonnttiinnggeennttCCoouuppoonn16.01068.0%08p%.a.p(.Ma.o(nMtholyn)thly)所需子字符串:ContingentCoupon16.008%p.a.(Monthly)我的问题是当原始......
  • Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式
    我正在使用PDF4meAPI将PDF发票转换为Excel文件。API可以正确读取日期。但是,当我打开Excel文件时,日期显示不一致:某些日期以正确的格式(dd/mm/yyyy)显示,而其他日期以错误的mm/dd/yyyy格式显示。当该月的某天小于或等于12时,似乎会出现这种不一致。......
  • python-input键盘输入
     str=input("请输入:")#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str) aa='请输入:'str=input(aa)#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str)      ......
  • Python从0到100(四十五):从字符串到前后端分离
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Python的运算符与条件表达式
    一、运算符Python数据是通过使用运算符来进行操作的,与数学运算符类似,主要运用于数字计算,比较大小和逻辑运算。Python中的运算符主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。1.算术运算符算术运算符用在数字表达式中,作用和在数学中是一样的。Python......
  • 在尝试使用 docker 运行基于 pythonnet 的项目时,找不到 C# 运行时
    屏幕截图我不断收到此错误:RuntimeError:Failedtocreateadefault.NETruntime,whichwouldhavebeen"mono"onthissystem.Eitherinstallacompatibleruntimeorconfigureitexplicitlyvia......
  • Python 在模块中使用变量
    如何将一个文件中声明的变量调用到另一个文件中?大家好我已经在file1中声明了我的变量。我的函数位于file2中,它使用该变量。如何调用主文件中声明的变量。提前致谢当然可以!以下是如何在Python中跨文件使用变量:file1.py(包含变量的文件)#在file1.p......
  • Python 类型提示和 linter
    我一直在向我们的python项目添加静态类型检查,例如像这样:fromtypingimportListfromsomethingimportMyOtherClassclassMyClass:def__init__(self)->None:self.some_var=None#type:List[MyOtherClass]但是,现在我们使用的linter(flake8和......
  • eclipse如何写python程序
    本文主要介绍在Windows系统环境下,搭建能在Eclipse中运行python程序的环境。一、Eclipse下载与安装:Eclipse是写JAVA的IDE,下载地址为:http://www.eclipse.org/downloads/下载安装,网上教程很多,不赘述。二、pydev插件下载与安装:启动Eclipse,点击Help—>EclipseMarketplace......
  • 运行 python 3 代码时出现 python 2 语法错误
    我有一个如下所示的类classExperimentResult(BaseDataObject):def__init__(self,result_type:str,data:dict,references:list):super().__init__()self.type=result_typeself.references=referencesself.data=data......