OpenCV python 掩模处理学习笔记


前言

接上篇OpenCV Python 直方图的使用。在opencv中使用掩模对图像进行处理是一个十分常用的方法。本篇是记录掩模操作的原理及使用。小白入门,如有不正确的地方希望大佬指正。


提示:需要引入numpy

1.1 掩模是什么

个人理解,掩模就是一层玻璃板,你可以指定哪一部分是透明的,哪一部分是不透明的,然后将掩模罩在需要处理的图片上。上图就很容易理解了:
在这里插入图片描述
左边的是原图,中间的就是掩模,而右边的则是将原图与掩模经行按位与操作之后的得到的图像。

1.2 掩模的原理

在掩模运算中使用了“与”和“或”运算,利用电路图就可以很好的理解。
在这里插入图片描述
与运算和串联电路是相对应的。如上图左侧串联电路,只有当两个开关都是闭合时,电路才是接通的,对应到数值运算上,只有参与运算的数值都为1时,与运算结果才是1。

或运算和并联电路相对应,任意一个开关闭合,电路都是接通的,对应到数值运算上,参与或运算的数值只要有一个值是1,或运算的结果就是1。

掩模操作主要用到的是按位“与运算”。其语法格式为dst = cv2.bitwise_and(src1,src2[,mask]])

在进行按位与运算时,需要先将参与运算的值转换为二进制数,然后将对应位上的值经行与运算。

按位与操作有以下特点:
1、将任何数值N与数值0经行按位与操作,都将会得到数值0。
2、将任何数值N(这里仅考虑8位值)与数值255(8位二进制数是1111 1111)进行按位与操作,都会得到数值N本身。

举个易于理解的小栗子:

<think>好的,用户想了解Dash和Dash Canvas,并且提到他使用过Python但不精通。首先,我需要确定用户的需求是什么。他可能是在寻找一个用于数据可视化的工具,特别是交互式方面的,因为Dash常用于构建Web应用。Dash Canvas可能是指与Dash配合使用的某个库,用于绘图或标注。 首先,我需要确认Dash Canvas具体指什么。Dash本身是Plotly的一个框架,用于构建分析型Web应用。而Dash Canvas可能是一个社区开发的组件,比如由plotly/dash-canvas这个库提供的,用于图像标注和绘图。需要验证这一点,因为可能存在其他类似的库或者用户可能有误解。 接下来,我需要介绍Dash的基本概念,包括它的工作原理、核心组件(如布局和回调),以及为什么它适合Python用户。然后转到Dash Canvas,说明它的用途,比如图像标注、绘图,可能用于机器学习的数据标注,或者交互式图像处理。 用户提到对Python不精通,所以需要避免过于复杂的代码示例,但又要提供足够的信息让他能够入门。可能需要分步骤,先安装,然后展示一个简单例子,再解释每个部分的作用。同时,要强调Dash的声明式编程和响应式回调的优势,这样即使不精通Python,也能理解如何构建应用。 另外,用户可能对实际应用场景感兴趣,比如数据科学项目、图像处理、教学工具等,可以举几个例子说明Dash Canvas的用途,帮助用户联想自己的使用场景。 还需要注意可能的常见问题,比如安装问题、依赖项,或者回调函数的编写,这些可能需要进一步的学习资源推荐,比如官方文档、社区教程等。 最后,确保语言简洁,结构清晰,分点说明,让用户能快速抓住重点。可能需要检查是否有错误信息,比如确认Dash Canvas的正确名称和用法,避免误导用户。</think>Dash 是一个基于 Python 的 Web 应用框架,专注于数据分析、可视化和交互式操作。它由 Plotly 团队开发,底层基于 React.js 和 Flask,允许用户通过纯 Python 代码快速构建交互式数据看板。如果你熟悉 Python 的数据分析栈(如 Pandas、NumPy),Dash 能帮助你快速将分析结果转化为 Web 应用。 --- ### **Dash 核心特点** 1. **声明式 UI** 通过 Python 代码直接定义界面布局,例如按钮、图表、输入框等组件。 ```python import dash from dash import html, dcc app = dash.Dash(__name__) app.layout = html.Div([ dcc.Input(id='input-text', type='text'), html.Button('Submit', id='submit-button'), html.Div(id='output-div') ]) ``` 2. **响应式回调** 通过 `@app.callback` 装饰器实现前后端交互逻辑,类似 Excel 的公式联动。 ```python @app.callback( Output('output-div', 'children'), Input('submit-button', 'n_clicks'), State('input-text', 'value') ) def update_output(n_clicks, text): return f'You entered: {text}' ``` 3. **集成可视化库** 支持 Plotly 图表、Matplotlib 图像,以及第三方组件(如 Dash Canvas)。 --- ### **Dash Canvas 是什么?** **Dash Canvas** 是一个专门为 Dash 开发的第三方组件库([GitHub 地址](https://github.com/plotly/dash-canvas)),主要用于在 Web 界面中实现手绘、标注、图像编辑等功能。它基于 HTML5 Canvas,适合需要用户直接与图像交互的场景,例如: - 数据标注(机器学习训练数据) - 图像分割/标注工具 - 手写笔记或绘图应用 --- ### **Dash Canvas 核心功能** 1. **图像加载与显示** 支持显示本地或远程图像文件(PNG、JPG 等)。 ```python from dash_canvas import DashCanvas canvas = DashCanvas( id='canvas', width=500, height=300, image_content='https://example.com/image.jpg' ) ``` 2. **绘制与标注** 用户可以直接在画布上使用画笔、橡皮擦、形状工具等进行操作。 ```python canvas = DashCanvas( tool='line', # 工具类型:'line', 'rectangle', 'circle', 'select' 等 lineWidth=5, lineColor='red' ) ``` 3. **数据提取** 获取用户在画布上的操作结果(如标注坐标、图像掩模等)。 ```python @app.callback( Output('output', 'children'), Input('canvas', 'json_data') ) def process_annotation(json_data): # 将标注数据转换为掩模或坐标 return json_data ``` --- ### **快速入门示例** 1. **安装** ```bash pip install dash dash-canvas ``` 2. **完整代码** ```python import dash from dash import html, Input, Output from dash_canvas import DashCanvas app = dash.Dash(__name__) app.layout = html.Div([ DashCanvas( id='canvas', width=500, height=300, tool='line', lineWidth=3, lineColor='blue' ), html.Div(id='annotation-output') ]) @app.callback( Output('annotation-output', 'children'), Input('canvas', 'json_data') ) def show_annotation(data): return f'Annotation Data: {str(data)[:100]}...' # 显示前100字符 if __name__ == '__main__': app.run_server(debug=True) ``` --- ### **适用场景** - **数据科学**:标注图像数据集(如目标检测)。 - **教育工具**:构建交互式教学画板。 - **原型开发**:快速验证图像交互类应用。 如果需要更复杂的图像处理,可以结合 OpenCV 或 Pillow 处理 `json_data` 生成的掩模数据。 希望这个介绍对你有帮助!如果有具体使用场景,可以进一步讨论实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值