图片藏字方案介绍

在Ubuntu安装库

sudo apt-get install libopencv-dev

生成字符图片,可以通过PS生成,身为程序员,尝试通过python生成,更加灵活方便

from PIL import Image, ImageDraw, ImageFontdef create_text_image(text, font_path, font_size, image_size, output_path):# 创建一个白色背景的图像image = Image.new('RGB', image_size, 'white')draw = ImageDraw.Draw(image)# 加载自定义字体font = ImageFont.truetype(font_path, font_size)# 使用 ImageDraw 的 textsize 方法获取文本尺寸text_width, text_height = draw.textsize(text, font=font)# 计算文本居中位置text_x = (image_size[0] - text_width) // 2text_y = (image_size[1] - text_height) // 2# 绘制黑色文字draw.text((text_x, text_y), text, font=font, fill='black')# 保存图像image.save(output_path)
# 示例用法
create_text_image("我钟意你", "STXINGKA.TTF", 200, (800, 200), "output.png")

最终的c++代码

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv) {if (argc != 7) {cout << "Usage: " << argv[0] << " <source_image_path> <watermark_image_path> <output_image_path> <watermark_scale> <watermark_spacing> <scale_factor>" << endl;return 1;}// 加载原始图片和水印图片Mat src = imread(argv[1], IMREAD_COLOR);Mat watermark = imread(argv[2], IMREAD_COLOR);if (src.empty() || watermark.empty()) {cerr << "Error loading images." << endl;return 1;}float watermarkScale = stof(argv[4]);int watermarkSpacing = stoi(argv[5]);float scaleFactor = stof(argv[6]);// 放大原始图片Mat scaledSrc;resize(src, scaledSrc, Size(), scaleFactor, scaleFactor, INTER_LANCZOS4);// 缩放水印图片Mat scaledWatermark;resize(watermark, scaledWatermark, Size(), watermarkScale, watermarkScale, INTER_LINEAR);// 重复放置水印for (int y = 0; y < scaledSrc.rows; y += scaledWatermark.rows + watermarkSpacing) {for (int x = 0; x < scaledSrc.cols; x += scaledWatermark.cols + watermarkSpacing) {for (int wy = 0; wy < scaledWatermark.rows && (y + wy) < scaledSrc.rows; ++wy) {for (int wx = 0; wx < scaledWatermark.cols && (x + wx) < scaledSrc.cols; ++wx) {Vec3b& srcPixel = scaledSrc.at<Vec3b>(y + wy, x + wx);Vec3b& watermarkPixel = scaledWatermark.at<Vec3b>(wy, wx);// 混合水印和原始图片for (int c = 0; c < scaledSrc.channels(); ++c) {srcPixel[c] = saturate_cast<unsigned char>((1.0 - 0.1) * srcPixel[c] + 0.1 * watermarkPixel[c]);  // 10%透明度的水印}}}}}// 保存输出图像if (!imwrite(argv[3], scaledSrc)) {cerr << "Failed to save the output image." << endl;return 1;}cout << "Watermark added successfully with scale " << watermarkScale << " and spacing " << watermarkSpacing << " on an enlarged image." << endl;return 0;
}
./main test.jpg test_img.png out.png 1 1000 20
CC = g++
# CFLAGS = -Wall -gall: mainmain: main.cppg++ -o main main.cpp -I/usr/include/opencv4 -L/usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecsclean:rm -f main

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

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

相关文章

[LeetCode] 784. 字母大小写全排序

题目描述&#xff1a; 给定一个字符串 s &#xff0c;通过将字符串 s 中的每个字母转变大小写&#xff0c;我们可以获得一个新的字符串。 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。 示例 1&#xff1a; 输入&#xff1a;s "a1b2" 输出&#xff1…

深入理解Java基础概念的高级应用(1/5)

目录 1. Java内存模型&#xff1a;堆、栈与方法区 示例代码&#xff1a;对象存储位置 2. 类加载器的工作原理 示例代码&#xff1a;自定义类加载器 3. JVM如何执行字节码 字节码指令示例 4. Java基础数据类型的存储与操作 自动装箱与拆箱 示例代码&#xff1a;基础类型…

Python小游戏14——雷霆战机

首先&#xff0c;你需要确保安装了Pygame库。如果你还没有安装&#xff0c;可以使用pip来安装&#xff1a; bash pip install pygame 代码如下&#xff1a; python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…

Android在kts中使用navigation及Args

Android在kts中使用navigation及Args 前言&#xff1a; ​ 之前在项目中使用过navigation&#xff0c;但都是以Groory的方式&#xff0c;最近一年多使用kts后忍不住把项目都改成kts的方式&#xff0c;不过其中也遇到不少坑&#xff0c;今天就讲解一下如何在kts中使用navigati…

解决蓝牙键盘按键错乱的问题

最近发现我的蓝牙键盘按下的键盘与实际不符&#xff0c;于是就上网搜索答案&#xff0c;网上的方法都试了一遍 最后想着准备退货&#xff0c;没想到客服直接给我解决了 原因很简单&#xff0c;就是之前误触了键盘的某些按键导致的 每个键盘品牌的按键因该都不同的&#xff0c;可…

VBA技术资料MF220:删除模块内容

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

英伟达GPU算力【自用】

GPU&#xff08;图形处理单元&#xff09;算力的提升是驱动当代科技革命的核心力量之一&#xff0c;尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展&#xff0c;不仅体现在游戏和图形处理的传统优势上&#xff0c;更在跨行…

【小白学机器学习21】 理解假设检验的关键:反证法

目录 理解假设检验的关键&#xff1a;反证法 1 假设的检验的出发点&#xff1a;H1假设&#xff0c; 1.1 为什么我们不去直接证明H1是否正确&#xff1f; 2 故意设立一个假设H1的否命题为H0 3 设定显著度α 4 总结假设检验的整个思路就是反证法 5 两类错误的关系 理解假…

ZooKeeper 客户端API操作

文章目录 一、节点信息1、创建节点2、获取子节点并监听节点变化3、判断节点是否存在4、客户端向服务端写入数据写入请求直接发给 Leader 节点写入请求直接发给 follow 节点 二、服务器动态上下线监听1、监听过程2、代码 三、分布式锁1、什么是分布式锁?2、Curator 框架实现分布…

AI视频监控平台教你如何行人追踪+人流量统计

行人追踪与人流量检测技术文档 1. 概述 本项目旨在通过使用ONNX和BYTETracker实现对视频中的行人进行实时追踪&#xff0c;并统计人流量变化。主要功能包括检测视频中的行人、追踪其位置变化、识别人流进出区域、并进行人流量的实时统计。本项目可以用于安全监控、人员流动分…

qt 滚动条 美化

qt QScrollBar 滚动条分为竖直与水平滚动条&#xff0c;两者设置上类似&#xff0c;但也有一些不同&#xff0c;下面主要讲述美化及注意事项。 一、竖直滚动条 竖直滚动条分为7个部分&#xff1a; sub-line、 up-arrow 、sub-page、 hanle、 add-line、 dow-arrow、 add-pag…

线性回归模型与检验 6个适用条件

当因变量与自变量间存在线性相关关系时&#xff0c;可以使用线性回归分析方法确定它们之间的相互依赖的定量关系。此处所说的定量关系&#xff0c;并非严格的因果关系&#xff0c;而是自变量X对因变量Y的影响或预测的作用。 例如分析广告费、产品单价、产品满意度、服务满意度…

说它是谁就是谁—Python语言中的鸭子类型

鸭子类型&#xff08;Duck Typing&#xff09;是动态类型语言中的一种类型推断风格&#xff0c;尤其在Python语言中得到了广泛的应用。它的核心思想是&#xff1a;“如果它走起路来像鸭子&#xff0c;叫起来像鸭子&#xff0c;那么它就是鸭子”。这句话的意思是&#xff0c;我们…

python_httpstat库

Python httpstat是一个基于Python的命令行工具&#xff0c;用于测量HTTP请求的性能和状态信息。它能够向目标服务器发送HTTP请求&#xff0c;并显示详细的统计信息&#xff0c;包括DNS解析时间、建立连接时间、TLS/SSL握手时间、首字节时间、总时间等。这些信息对于排查网络问题…

你是个优秀的人,但不是个好Leader

管理过程中&#xff0c;总有人长叹分身乏术&#xff0c;自己事必躬亲却收效甚微&#xff1b;总有人深陷日常繁琐&#xff0c;四处救火&#xff0c;似乎总有做不完的工作&#xff0c;操不完的心&#xff0c;这是为什么&#xff1f; 很大程度上是因为他们不懂管理的核心。无论…

详解varint,zigzag编码, 以及在Go标准库中的实现

文章目录 为啥需要varint编码为啥需要zigzag编码varint编码解码 zigzag编码解码 局限性 为啥需要varint编码 当我们用定长数字类型int32来表示整数时&#xff0c;为了传输一个整数1&#xff0c;我们需要传输00000000 00000000 00000000 00000001 32 个 bits&#xff0c;而有价…

使用 FastGPT + Ollama 搭建本地 AI 客服小助手

在数字化转型的背景下&#xff0c;越来越多的企业希望在服务体系中引入人工智能&#xff0c;以提供更高效的客户服务。而 AI 客服小助手的构建不仅可以解答客户的常见问题&#xff0c;还能减轻客服人员的工作压力&#xff0c;提高客户满意度。本文将介绍如何使用 FastGPT 和 Ol…

SQLite3库增删改查实现数据管理

1. SQLite3简介 SQLite3是一个轻量级的、嵌入式的关系型数据库管理系统&#xff0c;在保存测序数据或结果等时可使用&#xff0c;简单高效&#xff0c;并且有无需服务器、单文件存储数据、支持标准SQL、支持跨平台等优势。 本文以Sqlite3数据库为基础&#xff0c;创建代码示例…

tomcat基本配置

目录 1.java容器简介介绍 2.部署tomcat 2.1上传jdk 2.2创建一个软连接 2.3配置环境变量 2.4读取环境文件并且查看java版本 2.5检查jdk tomcat信息 2.6启动tomcat 2.7检测 3.tomcat 目录结构 3.1总体目录 3.2 bin目录 3.3conf 3.4 logs日志 4.运行代码 4.…

如何确保电子商务网站服务器的正常运行时间

对于电商网站而言&#xff0c;服务器的正常运行时间至关重要。网站宕机会直接影响销售额、客户体验以及品牌声誉。本文将详细探讨如何监控并保障服务器的正常运行时间&#xff0c;确保您的电商网站始终保持在线状态&#xff0c; 为什么监控正常运行时间很重要&#xff1f; 减…