Opencv框选黑色字体进行替换(涉及知识点:selectROI,在控制台输入字体大小,颜色,内容替换所选择的区域)

本文主要是介绍Opencv框选黑色字体进行替换(涉及知识点:selectROI,在控制台输入字体大小,颜色,内容替换所选择的区域),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import cv2
from PIL import Image,ImageDraw,ImageFont
import numpy as npimg_path = '../img/'
img_clean_path = '../img_clean/'
name = 'xiao_ben'
suf = '.png'img = cv2.imread(img_path+name+suf)
cv2.imshow('original', img)# 选择ROI
roi = cv2.selectROI(windowName="original", img=img, showCrosshair=False, fromCenter=False)
x, y, w, h = roi
print(roi)# roi_new = cv2.medianBlur(img[y:y + h, x:x + w],3)
img[y:y + h, x:x + w] = [255,255,255]
img_new = img.copy()
cv2.imwrite(f'{img_clean_path+name}_clean'+suf,img_new)font_size = int(input('请输入字体大小:'))
cv2.imshow('img_new', img_new)pil_img = Image.open(f'{img_clean_path+name}_clean'+suf)
draw = ImageDraw.Draw(pil_img)# 第一个参数是字体文件的路径,第二个是字体大小
font = ImageFont.truetype('simhei.ttf',font_size,encoding='utf-8')img_new = cv2.imread(f'{img_clean_path+name}_clean'+suf)
roi = cv2.selectROI(windowName="img_new", img=img_new, showCrosshair=False, fromCenter=False)
x, y, w, h = roi
print(roi)txt = input('请输入文本:')
color_value = ''
color = input('请输入颜色(白、黑):')
if color == '白':color_value = (255,255,255)
else:color_value = (0,0,0)
draw.text((x,y),txt,color_value,font=font)# PIL图片转cv2
cv2_text_im = cv2.cvtColor(np.array(pil_img),cv2.COLOR_RGB2BGR)# 变得可以拉伸 winname 必须要一样,且设置可以拉伸在前面
cv2.namedWindow('tupian', cv2.WINDOW_NORMAL)# 显示
cv2.imshow('tupian',cv2_text_im)
cv2.imwrite(f'{img_clean_path+name}_clean'+suf,cv2_text_im)# 退出
cv2.waitKey(0)
cv2.destroyAllWindows()

选择黑色字体,按enter:
在这里插入图片描述
黑色字体被去除了:
在这里插入图片描述
在这里插入图片描述
在控制台输入字体大小和颜色,将输入的文本显示在图片上:

在这里插入图片描述

这篇关于Opencv框选黑色字体进行替换(涉及知识点:selectROI,在控制台输入字体大小,颜色,内容替换所选择的区域)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2