3种使用OpenCV进行图像合成的技巧

准备好探索图像世界的魔法了吗?今天,我们将用Python和OpenCV库,一起解锁三种超炫的图像合成技巧,让你的照片变得与众不同!🌈

1. 图像融合:让风景与梦境交织

想象一下,把日出的辉煌与夜空的星辰合二为一,是不是很酷?

首先,确保你的Python环境已经安装了OpenCV。如果没有,简单一句命令就能搞定:

pip install opencv-python

接下来是魔法时间:

import cv2
import numpy as np# 加载图片,想象一下,一张是白天,一张是夜晚
day = cv2.imread('day.jpg')
night = cv2.imread('night.jpg')# 确保两张图片尺寸相同,不然它们可没法手拉手
if day.shape != night.shape:print("尺寸不匹配,请调整图片尺寸!")
else:# 创建一个简单的权重数组,用于控制融合效果alpha = 0.5  # 白天的权重beta = 0.5   # 夜晚的权重# 使用addWeighted函数,就像调色盘一样混合颜色blended = cv2.addWeighted(day, alpha, night, beta, 0)# 显示合成后的图像,见证奇迹cv2.imshow('梦幻交融', blended)cv2.waitKey(0)  # 等待按键后关闭窗口cv2.imwrite('dreamy_sky.jpg', blended)  # 保存你的杰作

这段代码的魔法在于addWeighted函数,它按指定权重合并两个图像,创造了一个既非完全白天也非完全夜晚的新景象,仿佛是梦境与现实的交汇。

2. 创意拼贴:打造个性化的照片墙

想不想让你的照片变成艺术展览的一部分?

让我们动手吧,这次我们需要随机挑选图像区域进行拼贴:

import random# 假设我们有两张图片,准备进行拼贴
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')# 定义拼贴区域的大小
tile_size = (200, 200)# 获取目标图像的尺寸
height, width, _ = img1.shape# 初始化一个新的空白画布
canvas = np.zeros((height, width, 3), dtype=np.uint8)# 随机放置图片块
for i in range(height // tile_size[0]):for j in range(width // tile_size[1]):# 随机选择来自img1或img2的图片块source_img = random.choice([img1, img2])x = j * tile_size[1]y = i * tile_size[0]canvas[y:y+tile_size[0], x:x+tile_size[1]] = source_img[y:y+tile_size[0], x:x+tile_size[1]]cv2.imshow('创意拼贴', canvas)
cv2.waitKey(0)
cv2.imwrite('art_wall.jpg', canvas)

这里的关键是通过循环和随机选择,将原图切割成小块,然后随机放置到一个新的画布上,创造出独一无二的拼贴效果。每一运行都是新的惊喜!

3. 梦幻镜像:水中的倒影,宛如仙境pondscape

想要复制自然界的镜像效应吗?水面的倒影,轻而易举就能实现。

让我们用水的倒影来增添几分神秘感:

def create_mirror_image(image, reflection_ratio=0.5):height, _, _ = image.shapemirror_height = int(height * reflection_ratio)# 上半部分保持不变upper_half = image[:height-mirror_height]# 下半部分翻转作为倒影reflected_half = cv2.flip(image[-mirror_height:], 0)# 渐变融合,模拟水面的模糊效果for i in range(mirror_height):alpha = i / mirror_heightblended_row = cv2.addWeighted(upper_half[-i-1], 1-alpha, reflected_half[i], alpha, 0)upper_half[-i-1] = blended_rowreturn upper_halfimage = cv2.imread('lake.jpg')
mirrored_image = create_mirror_image(image)
cv2.imshow('湖畔仙境', mirrored_image)
cv2.waitKey(0)
cv2.imwrite('pondscape.jpg', mirrored_image)

这段代码的亮点在于create_mirror_image函数。它首先确定倒影的高度,然后通过翻转下半部分图像创建倒影,接着使用渐变融合技术,模拟光线在水面上的折射效果,最终得到一幅如梦似幻的镜像画面。


好啦,今天的图像合成之旅就到这里。是不是觉得OpenCV超级有趣又强大呢?试着用这些技巧去创造你自己的视觉故事吧,分享给朋友们,让他们也惊叹不已!

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

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

相关文章

【前端每日基础】day33——响应式布局

响应式布局是一种网页设计的方法,它可以使网站在不同的设备上(如桌面电脑、平板电脑、手机等)以及不同的屏幕尺寸上呈现出最佳的显示效果。响应式布局的目标是使用户在任何设备上都能够方便地访问和浏览网站,而不需要使用不同版本…

ios v品会 api-sign算法

vip品会 api-sign算法还原 ios入门案例 视频系列 IOS逆向合集-前言哔哩哔哩bilibili 一、ios难度与安卓对比 这里直接复制 杨如画大佬的文章的内容: ios难度与安卓对比 很多人说ios逆向比安卓简单,有以下几个原因 1 首先就是闭源,安卓开源…

PH编程入门:从基础到实践的全方位解析

PH编程入门:从基础到实践的全方位解析 PH编程,作为一种独特而强大的编程语言,正逐渐在各个领域展现其巨大的潜力。对于初学者来说,如何快速入门并掌握PH编程的精髓,是一个既充满挑战又充满机遇的过程。本文将从四个方…

vscode过滤器@modified(查看配置了哪些设置)

文档 visualstudio•docs•getstarted•settingshttps://code.visualstudio.com/docs/getstarted/settings 说明 使用modified可以过滤出: 配置过的设置(和默认值不同); 在 settings.json 文件中配置了值的设置 步骤 1.打开…

Ubuntu Linux 24.04 使用certbot生成ssl证书

设置域名 1. 将需要生成SSL证书的域名解析到IP地址 idealand.xyz <> 64.176.82.190 检查防火墙的设置 1. 首先查看防火墙的状态&#xff1a; # ufw status 2. 如果防火墙开启了&#xff0c;要开放80和443端口用于certbot验证 # ufw allow 80 # ufw allow 443 生…

Vue3实战笔记(53)—奇怪+1,VUE3实战模拟股票大盘工作台

文章目录 前言一、实战模拟股票大盘工作台二、使用步骤总结 前言 实战模拟股票大盘工作台 一、实战模拟股票大盘工作台 接上文&#xff0c;这两天封装好的组件直接应用,上源码&#xff1a; <template><div class"smart_house pb-5"><v-row ><…

JS对象由浅入深

对象 对象&#xff08;Object&#xff09;&#xff1a;JavaScript里的一种数据类型&#xff08;引用类型&#xff09;&#xff0c;也是用于存储数据的 好处&#xff1a;可以用来详细的描述某个事物&#xff0c;是用键值对形式存储语义更明了 特点&#xff1a;对象数据是无序的&…

模型 FABE(特性 优势 好处 证据)法则

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。特性、优势、好处、证据&#xff0c;一气呵成。 1 FABE法则的应用 1.1 FABE法则营销商用跑步机 一家高端健身器材公司的销售代表正在向一家新开的健身房推销他们的商用跑步机。以下…

数控切割编程:探索精密制造的奥秘与挑战

数控切割编程&#xff1a;探索精密制造的奥秘与挑战 在现代化制造领域&#xff0c;数控切割编程以其高精度、高效率的特性&#xff0c;成为众多行业不可或缺的工艺手段。然而&#xff0c;对于初学者或外行人来说&#xff0c;数控切割编程往往显得神秘且复杂。本文将从四个方面…

【数据分享】中国电力年鉴(2004-2022)

大家好&#xff01;今天我要向大家介绍一份重要的中国电力统计数据资源——《中国电力年鉴》。这份年鉴涵盖了从2004年到2022年中国电力统计全面数据&#xff0c;并提供限时免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 自1993年首次出版以来&#xf…

【数据结构】链表与顺序表的比较

不同点&#xff1a; 顺序表和链表是两种常见的数据结构&#xff0c;他们的不同点在于存储方式和插入、删除操作、随机访问、cpu缓存利用率等方面。 一、存储方式不同: 顺序表&#xff1a; 顺序表的存储方式是顺序存储&#xff0c;在内存中申请一块连续的空间&#xff0c;通…

解决OpenCV读取目标图像,cv2.imshow出现闪退的问题

前言 本文是该专栏的第17篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 最近有粉丝朋友询问到OpenCV读取目标图像出现的一个问题,在基于python语言“使用OpenCV读取目标图像的时候,利用cv2.imshow函数出现闪退”的情况。 而本文,笔者将详细介绍针对上述问题,…

【硬件工程师话家常】硬件工程师的项目时间管理

在整个项目研发团队中&#xff0c;有两个人和所有人打交道&#xff0c;一个就是项目经理&#xff0c;另一个就是硬件工程师。硬件工程师需要和各种研发人员打交道 、协调工作&#xff0c;这也要求硬件工程师具有丰富的知识面和强大的协调能力。 硬件工程师处于一个项目中的核心…

Java运算符及程序逻辑控制

&#x1f389;welcome to my blog 请留下你宝贵的足迹吧(点赞&#x1f44d;评论&#x1f4dd;收藏⭐&#xff09; &#x1f493;期待你的一键三连&#xff0c;你的鼓励是我创作的动力之源&#x1f493; &#x1f423;目录 &#x1f340;运算符&#x1f4da;1.算术运算符&#x…

centos7安装jq报错No package jq available

安装EPEL仓库 sudo yum install epel-release清理软件仓缓存 sudo yum clean all重建软件仓缓存 sudo yum makecache重新安装jq yum install jq

python基础知识点(蓝桥杯python科目个人复习计划67)

今日复习内容&#xff1a;做一下昨天的算法赛题目&#xff0c;试试基础怎样 小白挑战赛一共6题&#xff0c;我只会5题&#xff0c;而且这5题是全对的&#xff0c;比起上次的两题&#xff0c;已经有进步了。 第一题&#xff1a;六一献礼 题目描述&#xff1a; 六月的阳光热情…

python判断文件是否存在

import os test_path "/Users/yxk/Desktop/test/GrayScale.tif" if(os.path.exists(test_path)):print(文件存在&#xff01;&#xff01;&#xff01;&#xff01;) else:print("文件不存在&#xff01;&#xff01;&#xff01;&#xff01;")结果如下 …

net前端怎么集成:探索集成之道

net前端怎么集成&#xff1a;探索集成之道 在软件开发领域&#xff0c;前端集成是一个复杂而关键的环节。特别是在.NET框架中&#xff0c;前端集成的成功与否直接影响着应用程序的整体性能和用户体验。本文将深入剖析net前端集成的四个方面、五个方面、六个方面和七个方面&…

RabbitMQ(四)事务消息,惰性队列,优先队列

文章目录 事务消息概念配置 惰性队列概念应用场景 优先队列概念配置 事务消息 仅在生产者端有效&#xff0c;消费端无效 概念 总结&#xff1a; 在生产者端使用事务消息和消费端没有关系在生产者端使用事务消息仅仅是控制事务内的消息是否发送提交事务就把事务内所有消息都发送…

Python知识点13---面向对象的编程

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python是一个完全面向对象开发的语言&#xff0c;它的一切都以对象的…