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:
在这里插入图片描述
黑色字体被去除了:
在这里插入图片描述
在这里插入图片描述
在控制台输入字体大小和颜色,将输入的文本显示在图片上:

在这里插入图片描述

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

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

相关文章

SpringAMQP入门案例——接收消息

依赖 <!--SpringAMQP起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> yml配置文件 自行修改 spring:rabbitmq:host: 192.168.220.130 # …

团队怎么高效制作问卷?

制作调查问卷时并不是一个人就能单独完成&#xff0c;通常情况下&#xff0c;完成一份调查问卷往往需要一个团队的成员参与&#xff0c;相互协作&#xff0c;共同完成。不过&#xff0c;多人协作经常会遇到协作壁垒&#xff0c;导致效率低下&#xff0c;那团队怎么才能高效协作…

IntelliJ IDEA 之初体验(上)

IntelliJ IDEA 是一款由 JetBrains 公司开发的强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专注于 Java 开发&#xff0c;同时支持多种其他编程语言。本文将详细介绍 IntelliJ IDEA 的安装过程以及一些常用的基本操作。 第一步&#xff1a;下载与安装 IntelliJ…

C/C++,树算法——Ukkonen的“后缀树“构造算法的源程序

1 文本格式 // A C program to implement Ukkonens Suffix Tree Construction // And then build generalized suffix tree #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_CHAR 256 struct SuffixTreeNode { struct Suffix…

vue3 Hooks函数使用及常用utils封装

hooks 是什么 vue3使用了composition API&#xff0c;我们可自定义封装hooks&#xff0c;达到复用&#xff0c;在Vue2中采取的mixins&#xff0c;对mixins而言&#xff0c; hooks更清楚复用功能代码的来源, 更清晰易懂。 简单来说&#xff1a;hooks 就是函数的一种写法&#xf…

把大模型塞进终端,能让消费电子市场回暖吗?

过去几个月时间里&#xff0c;“把大模型塞进终端”已然成了消费电子产业上下游心照不宣的共识。 高通、AMD、英特尔等上游的芯片厂商&#xff0c;争相喊出了混合AI、终端AI、AI计算等概念&#xff0c;努力向外界讲述终端AI化的想象空间&#xff1b;华为、小米、vivo等手机厂商…

C 语言实现TCP 通信,以及地址复用

服务端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <arpa/inet.h>int main() {//监听套接字文件描述符int listenFd -1;//连接套接字的文件描述符int connFd -1;//服务器的地址结构st…

c语言-联合体和枚举

文章目录 一、联合体1. 联合体类型的声明和创建2. 联合体的特点3. 联合体大小的计算4.总结 二、枚举1. 枚举类型的声明2. 枚举类型的优点3. 枚举类型的使用 一、联合体 &#xff08;1&#xff09; 像结构体⼀样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成…

GEE:使用Roberts算子卷积核进行图像卷积操作

作者:CSDN @ _养乐多_ 本文将深入探讨边缘检测中的一个经典算法,即Roberts算子卷积。我们将介绍该算法的基本原理,并演示如何在Google Earth Engine中应用Roberts算子进行图像卷积操作。并以试验区NDVI为例子,研究区真彩色影像、NDVI图像以及卷积结果如下所示, 文章目录 …

LeetCode刷题---路径问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、不同路径 题目链接&#xff1a;不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记…

Python---练习:列表赋值---追加append尾部追加元素,追加的是一个元素整体

相关链接&#xff1a; Python--列表及其应用场景---增、删、改、查。-CSDN博客 代码&#xff1a; # 列表赋值 a [1, 2, 3] a.append([3, 4]) # append尾部追加元素&#xff0c;追加的是一个元素整体&#xff1a;[3, 4] print(a)

【重点】【滑动窗口】3. 无重复字符的最长子串

题目 参考《算法小抄》重的解法&#xff0c;重点理解&#xff01;&#xff01;&#xff01; class Solution {public int lengthOfLongestSubstring(String s) {if (s.length() < 2) {return s.length();}char[] array s.toCharArray();int left 0, right 0, res 0;int…

面试题:为什么 wait/notify 必须与 synchronized 一起使用??

文章目录 为什么 java wait/notify 必须与 synchronized 一起使用synchronized是什么synchronized如何实现锁wait/notify不用synchronized 会怎么样[最终形态] 把lock和obj合一lost wake up 为什么 java wait/notify 必须与 synchronized 一起使用 这个问题就是书本上没怎么讲…

理解宏任务和微任务:JavaScript 异步编程的必备知识(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

react-native实践日记--5.ReactNative 项目版本升级,0.61到0.72升级的问题记录(一)

ReactNative的版本迭代太频繁&#xff0c;官方说的是React Native原则上每月发布一个新版本&#xff0c;且目前基本是向前不兼容的&#xff0c;导致项目升级很困难&#xff0c;各种依赖插件问题多多&#xff0c;下面是记录的升级中遇到的主要几个印象深刻的问题。 升级&#x…

教你5步学会用Llama2:我见过最简单的大模型教学

在这篇博客中&#xff0c;Meta 探讨了使用 Llama 2 的五个步骤&#xff0c;以便使用者在自己的项目中充分利用 Llama 2 的优势。同时详细介绍 Llama 2 的关键概念、设置方法、可用资源&#xff0c;并提供一步步设置和运行 Llama 2 的流程。 Meta 开源的 Llama 2 包括模型权重和…

Java开发项目之KTV点歌系统设计和实现

项目介绍 本系统实现KTV点歌管理的信息化&#xff0c;可以方便管理员进行更加方便快捷的管理。系统的主要使用者分为管理员和普通用户。 管理员功能模块&#xff1a; 个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理。 普通用户功能模块&#xff1a; 个人中心…

一、CSharp_Basic:什么是.Net平台?什么是.Net FrameWork?什么是C#?

什么是.Net平台&#xff1f; 在了解C#之前&#xff0c;我们应该先了解一下什么是.Net平台。 .Net的诞生 2000年&#xff0c;这时候的微软凭借其Windows操作系统庞大的用户基数&#xff0c;推出了.Net1.0的标准。 也就是实现在Windows平台上面开发和应用程序的概念。我们可以简…

P3 Linux应用编程:系统调用与库函数

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专栏3: ​​​​​​《 链表_Chen…

shell脚本部署重启java服务

背景 一些小型项目未上k8s&#xff0c;直接在云服务器上部署&#xff0c;经常手动部署jar包&#xff0c;现记录常用shell脚本&#xff0c;里面都有注释&#xff0c;主要是重启服务。 #!/bin/bash# 定义应用程序名称和路径 JAR_NAME"demo-0.0.1.jar" JAR_PATH"…