提取纯色马赛克

news2024/11/20 2:25:25

​​​​​​

图像预处理


将彩色图像加载到内存。
转换图像为灰度图像,以简化处理。
对灰度图像应用二值化处理,将图像中的纯色区域分为前景和背景。这可以使用阈值处理来完成。

轮廓检测


使用轮廓检测算法,例如OpenCV的 findContours 函数,来寻找二值图像中的所有轮廓。
存储检测到的轮廓以备后续使用。

轮廓筛选


遍历所有检测到的轮廓。
使用 approxPolyDP 函数或其他多边形逼近技术来判断轮廓是否接近于矩形形状。
可以设置一个适当的阈值,以确定轮廓是否足够接近矩形。
可以排除太小或太大的轮廓。

颜色分析


对筛选出的轮廓内的区域进行颜色分析,以确定是否为纯色填充。
选择轮廓内的多个采样点(例如,随机选择或均匀采样),通常在矩形内部以及矩形边界附近。
对每个采样点获取其颜色,可以是RGB颜色或灰度值。
计算采样点颜色的均值或方差。
如果颜色差异低于一定阈值,认为这个区域是纯色填充。

确定矩形参数


确定轮廓是纯色填充矩形,可以获取该轮廓的外接矩形。
外接矩形提供了矩形的位置(x,y),宽度(width),高度(height)信息。
可以获取轮廓的中心点坐标,通过矩形的左上角和右下角坐标计算而得。

输出结果


将每个检测到的纯色填充矩形的参数(x、y、width、height)以及其他相关信息存储在数据结构中。
这些信息可以进一步用于生成报告、可视化或导出到其他系统中。

性能考虑


算法的性能和准确度可能受图像质量、光线条件和颜色变化的影响。
可以进行优化,如多线程处理或GPU加速,以提高性能。
对不同图像和应用场景进行充分测试以验证算法的性能。

实现代码

#!/anaconda3/envs/FEALPy/bin python3.7
# -*- coding: utf-8 -*-
# ---
# @Software: PyCharm
# @File: get_mosaic.py
# @Author: jerry
# @E-mail: zj850324@yeah.net
# @Site: 
# @Time: 10月 13, 2023
# ---
# 输入一张带矩形纯色填充马赛克的图片,自动拾取出马赛克矩形的x,y,width,height,并排除太小的矩形。
# ---

import cv2
import numpy as np

def extract_and_draw_mosaics(image_path, min_mosaic_size=10, max_display_width=1600, target_color=(181, 230, 29)):
    # 读取图像
    image = cv2.imread(image_path)

    # 计算缩放比例
    width, height = image.shape[1], image.shape[0]
    scale = max_display_width / width if width > max_display_width else 1.0
    new_width = int(width * scale)
    new_height = int(height * scale)

    # 缩小图像
    small_image = cv2.resize(image, (new_width, new_height))

    # 定义目标颜色的阈值范围
    lower_color = np.array([target_color[2] - 1, target_color[1] - 1, target_color[0] - 1])
    upper_color = np.array([target_color[2] + 1, target_color[1] + 1, target_color[0] + 1])

    # 使用阈值操作找到目标颜色填充的区域
    mask = cv2.inRange(small_image, lower_color, upper_color)

    # 查找轮廓
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 提取满足最小尺寸要求的马赛克并画在图像上
    for contour in contours:
        x, y, w, h = cv2.boundingRect(contour)
        if w >= min_mosaic_size and h >= min_mosaic_size:
            cv2.rectangle(small_image, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 画矩形

    # 显示图像
    cv2.imshow('Image with Mosaics', small_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 使用示例
image_path = './images/1.png'  # 图像路径
min_mosaic_size = 10  # 定义最小马赛克大小
max_display_width = 1600  # 定义最大显示宽度
target_color = (181, 230, 29)  # 定义目标颜色

extract_and_draw_mosaics(image_path, min_mosaic_size, max_display_width, target_color)

实现效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1221472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

①Redis String 字符串类型【命令汇总】

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Redis String ①Redis String 字符串类型【命令…

Linux 无名管道实现文件复制

无名管道 通过一个管道(假象)进行传输数据,但是这个管道的传输方式是单工(半双工)的,就是这个管道允许进行发送和接受数据,不过不能同时进行。 创建无名管道 这里用到一个pipe(&…

微软Ignite 2023大盘点:GPT-4 Turbo、DALL-E 3等

11月16日,微软在美国西雅图举办“Microsoft Ignite 2023”全球开发者大会。ChatGPT等生成式AI成为了本次大会的重要主题。 下面「AIGC开放社区」将根据大会发布的内容,盘点重要内容。 GPT-4 Turbo、 DALL E 3等全新模型 16K上下文的新GPT-3.5 Turbo模…

视频桥接IC LT8711UXC适用于4LANE TYPE-C/DP转HDMI,另支持支持HDCP协议,分辨率高达4K60HZ!

1.描述 应用功能:LT8711UXC适用于TYPE-C转HDMI2.0,DP1.4转HDMI2.0应用方案,另HDMI带HDCP协议 分辨率:支持4K60HZ 工作温度范围:−40C to 85C 产品封装:QFN48 (6*6)最小包装数:4900pc…

给openlab搭建web网站

网站需求: 1、基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2、给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站 1)基于 www.openlab.com/student 网站访问学生信息 2)基于 www.openlab.com/…

今天遇到Windows 10里安装的Ubuntu(WSL)的缺点

随着技术的发展,越来越多开发者转向使用 Windows Subsystem for Linux(WSL)在 Windows 10 上进行开发,也就是说不用虚拟机,不用准备多一台电脑,只需要在Windows 10/11 里安装 WSL 就能体验 Linux 系统。因此…

最大似然估计的介绍

最大似然估计(Maximum Likelihood Estimation,简称MLE)是一种用于估计概率分布中参数的方法。该方法的核心思想是选择使得观察到的数据在给定模型下出现的概率最大的参数值作为估计值。 最大似然估计具有很好的性质,包括渐进正态性…

新手老师怎么发布班级查询?

现在科技发展飞快,班级查询系统已经成为了许多学校必备的教务工具。可以让学生们快速查找到班级的各项信息,包括但不限于课程安排、考试成绩、分班等。对老师来说,班级查询系统可以提高工作效率,减少重复劳动,学生或者…

postman查询数据库-Xmysql

步骤1:安装node.js 下载地址:Download | Node.js步骤2:安装Xmysql工具,命令行输入 npm install -g xmysql ,过程中会自动安装相关依赖;步骤3:连接数据库 xmysql -h ip -u 账号 -p 密码 -d 库名 如下表示连…

Attention Transformer

来源老师课件,方便以后复习。 课参考链接: http://jalammar.github.io/illustrated-transformer/ 之前的知识链接: 【知识链接】WGAN Transformer Vit Swin-Transformer Swin-Unet Res-Vit TransUNet MAE Bra ADDA 打分函数: 多头…

腾讯云便宜服务器有哪些?腾讯云这个服务器一个月7块钱!

大家好,今天我们来一起探讨一下腾讯云便宜服务器的相关问题。相信很多人在寻找可靠的云服务器时都会关注价格,而腾讯云作为国内领先的云计算平台,其价格优惠的服务器产品也是备受关注。那么,腾讯云便宜服务器有哪些呢?…

apifox中get请求传递集合方式

项目中get请求需要传递集合方式: 接口中接收方式: GetMapping("/findGoodsCouponInfoVos") public ApiResult findGoodsCouponInfoVos(RequestParam(value "selectedCouponIds",required false) List<Integer> selectedCouponIds, NotNull(messa…

flink中配置Rockdb的重要配置项

背景 由于我们在flink中使用了状态比较大&#xff0c;无法完全把状态数据存放到tm的堆内存中&#xff0c;所以我们选择了把状态存放到rockdb上&#xff0c;也就是使用rockdb作为状态后端存储,本文就是简单记录下使用rockdb状态后端存储的几个重要的配置项 使用rockdb状态后端…

59 权限提升-Win溢出漏洞及ATSCPS提权

目录 知识点必备&#xff1a;windows权限认识(用户及用户组)0x01 普通权限0x02特殊权限 演示案例:基于WEB环境下的权限提升-阿里云靶机基于本地环境下的权限提升-系统溢出漏洞基于本地环境下的权限提升-AT&SC&PS命令 案例给到的思路点总结如下:涉及资源: 这个章节会讲到…

122.Android 简单的历史搜索

第一步 FlowLayout&#xff1a; public class FlowLayout extends ViewGroup {private int mHorizontalSpacing dp2px(16); //每个item横向间距private int mVerticalSpacing dp2px(8); //每个item横向间距private List<List<View>> allLines new ArrayList<…

PyCharm中常用插件推荐

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Jmeter进行压力测试不为人知的秘密

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是免…

37 关于 undo 日志

前言 undo 和 redo 是在 mysql 中 事务, 或者 异常恢复 的场景下面 经常会看到的两个概念 这里 来看一下 undo, undo 主要是用于 事务回滚 的场景下面 测试表结构如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NUL…

python基础教程之有序字典

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 有序字典和通常字典类似&#xff0c;只是它可以记录元素插入其中的顺序&#xff0c;而一般字典是会以任意的顺序迭代的。 普通字典&#xff1a; d1{} d1[a]A d1[b]B d1[c]C d1[d]D #此时的d1 {a:A,b:B,c:C,d:D} for k,v …

本地jar导入maven

一、通过dependency引入 1.1. jar包放置&#xff0c;建造lib目录 1.2. pom.xml文件 <dependency><groupId>zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version><!--system&#xff0c;类似provided&#x…