提取纯色马赛克

​​​​​​

图像预处理


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

轮廓检测


使用轮廓检测算法,例如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)

实现效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vite+vue3+electron开发环境搭建

环境 node 18.14.2 yarn 1.22 项目创建 yarn create vite test01安装vue环境 cd test01 yarn yarn dev说明vue环境搭建成功 安装electron # 因为有的版本会报错所以指定了版本 yarn add electron26.1.0 -D安装vite-plugin-electron yarn add -D vite-plugin-electron根目…

〖大前端 - 基础入门三大核心之JS篇㊱〗- JavaScript 的DOM节点操作

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

专注于绘画,不受限制!尝试Growly Draw for Mac的快速绘画应用

Growly Draw Mac版是Mac平台上的一款绘画应用,它提供了简单易用的画板页面和多种色彩、画笔工具,让你可以轻松地完成作画。无论你是初学者还是专业人士,都可以在这款应用中找到适合自己的绘画方式。通过使用Growly Draw Mac版,你可…

ChatGPT + DALL·E 3

参考链接: https://chat.xutongbao.top/

基于R语言平台Biomod2模型的物种分布建模与可视化分析

!](https://img-blog.csdnimg.cn/84e1cc8c7f9b4b6ab60903ffa17d82f0.jpeg#pic_center)

​软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】 课本里章节里所有蓝色字体的思维导图

Pandas 累计统计函数【cumsum、cumprod、cummax、cummin】【计算前1/2/3/…/n个数的和、积、最大值、最小值】

一、累计统计函数 函数作用cumsum计算前1/2/3/…/n个数的和cummax计算前1/2/3/…/n个数的最大值cummin计算前1/2/3/…/n个数的最小值cumprod计算前1/2/3/…/n个数的积 import numpy as np import pandas as pd# np.nan :空值 df pd.DataFrame({key1: np.arange(1…

LLM大模型 (chatgpt) 在搜索和推荐上的应用

目录 1 大模型在搜索的应用1.1 召回1.1.1 倒排索引1.1.2 倒排索引存在的问题1.1.3 大模型在搜索召回的应用 (实体倒排索引) 1.2 排序1.2.1 大模型在搜索排序应用(融入LLM实体排序) 2 大模型在推荐的应用2.1 学术界关于大模型在推荐的研究2.2 …

HttpClient示例

HttpClient官网 HttpClient - HttpClient Home 每个对应版本都有 快速开始的示例 maven项目 pom依赖 <dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.…

智能指针面试题

智能指针被问到的概率还是很大的&#xff0c;特别是Shared_ptr&#xff0c;最好会手撕&#xff0c;亲身经历&#xff01; 基本概念 1. RAll RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种利用对象生命周期来控制程序资源&#xff08;如内存、文…

(七)什么是Vite——vite优劣势、命令

vite分享ppt&#xff0c;感兴趣的可以下载&#xff1a; ​​​​​​​Vite分享、原理介绍ppt 什么是vite系列目录&#xff1a; &#xff08;一&#xff09;什么是Vite——vite介绍与使用-CSDN博客 &#xff08;二&#xff09;什么是Vite——Vite 和 Webpack 区别&#xff0…

Python入门学习篇(一)——注释变量输入输出

1 注释 1.1 作用 a 方便他人和自己阅读代码 b 告诉编译器这部分内容是不用执行的。1.2 单行注释 # 注释内容1.3 多行注释(引号) 1.3.1 三对双引号 """ 注释内容 """1.3.2 三对单引号 注释内容 1.4 pycharm快捷键使用 ctrl/ 多行注释(以# …

挑战视觉边界,探索图形验证码背后的黑科技

在日常生活中&#xff0c;我们登录网站或者其他平台时&#xff0c;在填写完账号密码之后&#xff0c;还会让我们填写4或6位的数字或者英文字母等&#xff0c;填写正确才能请求登录。这个其实是防止某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试&#xff0c;如下…

【观察】华为:数智世界“一触即达”,应对数智化转型“千变万化”

毫无疑问&#xff0c;数智化既是这个时代前进所趋&#xff0c;也是国家战略所指&#xff0c;更是所有企业未来发展进程中达成的高度共识。 但也要看到&#xff0c;由于大量新兴技术的出现&#xff0c;技术热点不停的轮转&#xff0c;加上市场环境的快速变化&#xff0c;让数智化…

ThreadLocal优化

测试类证明一下ThreadLocal存储的数据是线程程安全的 package com.lin.springboot01;import org.junit.jupiter.api.Test;public class testThreadLocal {Testpublic void testThreadLocalSetAndGet(){//提供一个ThreadLocal对象ThreadLocal t1 new ThreadLocal();new Thread…

无重复最长字符串(最长无重复子字符串),剑指offer,力扣

目录 原题&#xff1a; 力扣地址&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 难度算中下吧&#xff0c;这个总体不算很难&#xff0c;而且滑动窗口&#xff0c;以及哈希都比较常见 审题目事例提示&#xff1a; 解题思路&#xff08;…

在QGIS中加载显示3DTiles数据

“我们最近有机会在QGIS 3.34中实现一个非常令人兴奋的功能–能够以“Cesium 3D Tiles”格式加载和查看3D内容&#xff01;” ——QGIS官方的 宣传介绍。 体验一下&#xff0c;感觉就是如芒刺背、如坐针毡、如鲠在喉。 除非我电脑硬件有问题&#xff0c;要么QGIS的3Dtiles是真…

【迅搜01】安装运行并测试XunSearch

安装运行并测试XunSearch 这回的新系列&#xff0c;我们将学习到的是一个搜索引擎 迅搜 XunSearch 的使用。这个搜索引擎在 PHP 圈可能还是有一点名气的&#xff0c;而且也是一直在更新的&#xff0c;虽说现在 ElasticSearch 已经是实际上的搜索引擎霸主了&#xff0c;而且还有…

用Java实现贪吃蛇小游戏

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为贪吃蛇。 其次在贪吃蛇项目下创建一个名为images的文件夹用来存放游戏相关图片。 然后再在项目的src文件下创建一个com.xxx.view的包用来存放所有的图形界面类&#xff0c;创建一个com.xxx.controller的包用来存放启…

DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据

Google DeepMind日前悄然宣布了其人工智能研究的重大进展&#xff0c;推出了一款名为“Mirasol3B”的新型自回归模型&#xff0c;旨在提升对长视频输入的理解能力。该新模型展示了一种颠覆性的多模态学习方法&#xff0c;以更综合和高效的方式处理音频、视频和文本数据。 Googl…