2-1 opencv实战进阶系列 阈值编辑器

2024-09-07 06:44

本文主要是介绍2-1 opencv实战进阶系列 阈值编辑器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、不说废话,先上现象 

二、前言

三、方法详解

四、贴出完整代码


一、不说废话,先上现象 

二、前言

对图像的处理中,设置合适的掩膜、寻找多边形、颜色追踪等方法都需要预先设置好颜色的上阈值和下阈值,来从原图中分割出我们需要的部分。

然而,opencv并没有像openmv那样方便的阈值编辑器对原图进行处理,所以本文提供一个方便的方法,可以同时处理彩图RGB、HSV、灰度值的阈值。

三、方法详解

cv2.createTrackbar('Low R', 'RGB Threshold', 0, 255, lambda x: None)

  1. 第一个参数 ('Low R'): 这是滑动条的名称,它将显示在滑动条旁边,以便用户知道这个滑动条是用来调整什么的。在这个例子中,'Low R' 表示这是一个用于调整红色通道的最低阈值的滑动条。

  2. 第二个参数 ('RGB Threshold'): 这是滑动条将要被放置的窗口的名称。在这个例子中,滑动条将被放置在名为 'RGB Threshold' 的窗口中。

  3. 第三个参数 (0): 这是滑动条的初始位置。在这个例子中,滑动条从 0 开始。

  4. 第四个参数 (255): 这是滑动条的最大值。在这个例子中,滑动条的范围是从 0 到 255,这通常用于表示颜色值,因为颜色通道(如红色、绿色和蓝色)的值通常在 0 到 255 之间。

  5. 第五个参数 (lambda x: None): 这是一个回调函数,它在滑动条的值改变时被调用。在这个例子中,回调函数是一个空操作(lambda x: None),这意味着当滑动条的值改变时,不会执行任何操作。通常,你可以在这里放置一个函数调用来处理滑动条值的变化,例如重新计算图像的阈值或更新显示的图像。

lR = cv2.getTrackbarPos('Low R', 'RGB Threshold')

  1. 第一个参数 ('Low R'): 这是你想要获取当前位置的滑动条的名称。在这个例子中,'Low R' 指的是红色通道的最低阈值滑动条。

  2. 第二个参数 ('RGB Threshold'): 这是包含该滑动条的窗口的名称。这个参数确保你能够从正确的窗口中获取滑动条的位置。在这个例子中,'RGB Threshold' 是包含名为 'Low R' 的滑动条的窗口。

函数 cv2.getTrackbarPos 会返回一个整数,表示指定滑动条的当前位置。这个值可以在程序中用于根据用户的输入调整图像处理参数,例如,根据滑动条的位置来调整颜色阈值。

四、贴出完整代码

import cv2
import numpy as np# 读取图像
image = cv2.imread('test.png')
cv2.imshow('image', image)#cv2.cvtColor 操作在循环外完成,否则CPU占用率会很高
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 创建窗口
cv2.namedWindow('image')
cv2.namedWindow('RGB Threshold')
cv2.namedWindow('HSV Threshold')
cv2.namedWindow('Grayscale Threshold')# 创建轨道条(滑块)
cv2.createTrackbar('Low R', 'RGB Threshold', 0, 255, lambda x: None)
cv2.createTrackbar('High R', 'RGB Threshold', 255, 255, lambda x: None)
cv2.createTrackbar('Low G', 'RGB Threshold', 0, 255, lambda x: None)
cv2.createTrackbar('High G', 'RGB Threshold', 255, 255, lambda x: None)
cv2.createTrackbar('Low B', 'RGB Threshold', 0, 255, lambda x: None)
cv2.createTrackbar('High B', 'RGB Threshold', 255, 255, lambda x: None)cv2.createTrackbar('Low H', 'HSV Threshold', 0, 179, lambda x: None)  # HSV色调范围是0-179
cv2.createTrackbar('High H', 'HSV Threshold', 179, 179, lambda x: None)
cv2.createTrackbar('Low S', 'HSV Threshold', 0, 255, lambda x: None)
cv2.createTrackbar('High S', 'HSV Threshold', 255, 255, lambda x: None)
cv2.createTrackbar('Low V', 'HSV Threshold', 0, 255, lambda x: None)
cv2.createTrackbar('High V', 'HSV Threshold', 255, 255, lambda x: None)cv2.createTrackbar('Low Gray', 'Grayscale Threshold', 0, 255, lambda x: None)
cv2.createTrackbar('High Gray', 'Grayscale Threshold', 255, 255, lambda x: None)while True:# 读取滑轨的值lR = cv2.getTrackbarPos('Low R', 'RGB Threshold')hR = cv2.getTrackbarPos('High R', 'RGB Threshold')lG = cv2.getTrackbarPos('Low G', 'RGB Threshold')hG = cv2.getTrackbarPos('High G', 'RGB Threshold')lB = cv2.getTrackbarPos('Low B', 'RGB Threshold')hB = cv2.getTrackbarPos('High B', 'RGB Threshold')lH = cv2.getTrackbarPos('Low H', 'HSV Threshold')hH = cv2.getTrackbarPos('High H', 'HSV Threshold')lS = cv2.getTrackbarPos('Low S', 'HSV Threshold')hS = cv2.getTrackbarPos('High S', 'HSV Threshold')lV = cv2.getTrackbarPos('Low V', 'HSV Threshold')hV = cv2.getTrackbarPos('High V', 'HSV Threshold')lGray = cv2.getTrackbarPos('Low Gray', 'Grayscale Threshold')hGray = cv2.getTrackbarPos('High Gray', 'Grayscale Threshold')# 应用阈值lower_rgb = np.array([lB, lG, lR])upper_rgb = np.array([hB, hG, hR])mask_rgb = cv2.inRange(image, lower_rgb, upper_rgb)lower_hsv = np.array([lH, lS, lV])upper_hsv = np.array([hH, hS, hV])mask_hsv = cv2.inRange(hsv, lower_hsv, upper_hsv)mask_gray = cv2.inRange(gray, lGray, hGray)# 显示结果cv2.imshow('RGB Threshold', mask_rgb)cv2.imshow('HSV Threshold', mask_hsv)cv2.imshow('Grayscale Threshold', mask_gray)    # 按 'q' 退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakcv2.destroyAllWindows()

持续更新中……

这篇关于2-1 opencv实战进阶系列 阈值编辑器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144351

相关文章

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传