图像重定向Image Retarget

news2024/12/23 19:08:00

1、什么是图像重定向?

图像重定向旨在调整图像的尺寸和比例,以适应不同的显示设备或布局要求。

它可以通过添加或删除像素来改变图像的宽度和高度,同时保持图像的内容和结构的相对比例。 这种技术可以通过保持图像的关键特征和结构来最大程度地减少图像的失真。

 2、图像重定向如何保持图像的关键点?

1. 重采样:

图像的像素会被重新采样,即重新分配像素的位置和颜色值。重采样算法可以根据像素的相对重要性和位置来决定像素的重新分配方式,以保持图像的关键点。

2. 内容保护:可以通过检测图像中的边缘、纹理或颜色分布等特征,并在重定向过程中优先保留这些特征。

3. 内容感知重定向:根据图像的内容和语义信息来调整图像的尺寸和比例。这种方法可以识别图像中的重要对象或区域,并保持它们的相对位置和比例,以确保图像的关键特征得到保留。

3、 举例说明如何图像重定向(没有实际操作,只有模版代码)

图片比例为4:3,我想通过内容感知的方式把图片变成2:3,要求大钟楼完全保留,不做处理一样,绿树等进行缩放,该如何做?

1. 使用图像处理库(如OpenCV)加载原始图像。

import cv2
image = cv2.imread("源图像名称.jpg") 

2. 根据原始图像的宽高比例计算目标图像的宽度和高度。   

original_height, original_width, _ = image.shape    
target_width = int(original_height * 2/3)
target_height = original_height 

3. 确定大钟楼区域的位置。可以使用图像编辑软件或编程方法来标记大钟楼的位置。(好像目前对图像的标记任务都是通过人工来完成的?)     

# 假设大钟楼区域的位置为 (x1, y1) 到 (x2, y2)
 x1, y1, x2, y2 = 100, 200, 400, 600

4. 将大钟楼区域的宽度调整为目标图像的宽度,并根据比例计算大钟楼区域的高度。     

adjusted_x1 = int(x1 * target_width / original_width)
adjusted_x2 = int(x2 * target_width / original_width)
adjusted_y1 = int(y1 * target_height / original_height)
adjusted_y2 = int(y2 * target_height / original_height)

adjusted_width = adjusted_x2 - adjusted_x1
adjusted_height = adjusted_y2 - adjusted_y1

 5. 使用图像缩放函数对原始图像进行内容感知缩放。

resized_image = cv2.resize(image, (target_width, target_height), fx=0, fy=0)

# 将大钟楼区域的部分还原为原始尺寸
resized_image[adjusted_y1:adjusted_y2, adjusted_x1:adjusted_x2] = image[y1:y2, x1:x2]

# 对除大钟楼区域以外的部分进行缩放
roi = resized_image[0:adjusted_y1, 0:target_width]
resized_roi = cv2.resize(roi, (target_width, adjusted_y1))
resized_image[0:adjusted_y1, 0:target_width] = resized_roi

roi = resized_image[adjusted_y2:target_height, 0:target_width]
resized_roi = cv2.resize(roi, (target_width, target_height - adjusted_y2))
resized_image[adjusted_y2:target_height, 0:target_width] = resized_roi

6. 检查结果并保存处理后的图像。

cv2.imshow("Resized Image", resized_image)
cv2.waitKey(0)
cv2.imwrite("resized_image.jpg", resized_image)

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

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

相关文章

【传智杯】儒略历、评委打分、萝卜数据库题解

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙请不要相信胜利就像山坡上的蒲公英一样唾手…

unity3d地图、地面跟着NPC跑

清除烘焙后,再 将地图、地面的设置为非静态。只设置NPC的寻路路面为静态,再烘焙

戴尔科技推出全新96核Precision 7875塔式工作站

工作站行业一直是快节奏且充满惊喜的。在过去25年中,戴尔Precision一直处于行业前沿,帮助创作者、工程师、建筑师、研究人员等将想法变为现实,并对整个世界产生影响。工作站所发挥的作用至关重要,被视为化不可能为可能的必要工具。如今,人工智能(AI)和生成式AI(GenAI)的浪潮正在…

Android : Fragment 传递数据 — 简单应用

示例图: 创建 Fragment new -> Fragment -> Fragment(Blank) MainActivity.java package com.example.fragmentdemo;import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import andro…

媒介盒子分享:实用软文写作技巧

信息洪流中品牌方如果想要抓住用户注意力就需要一定的技巧,而品牌方写软文时是不是经常面临无法与用户产生共鸣、软文没有转化率的困境。今天媒介盒子就来和大家分享:实用软文写作技巧。 一、 强化优势 人一定是会往自己喜欢的方向走,远离不…

杂记 | 使用Docker安装并配置MongoDB以支持事务(单副本,并解决了证书文件错误的问题)

文章目录 00 安装前的准备01 创建Docker Compose文件02 设置证书文件03 启动MongoDB04 初始化副本集和创建用户05 验证安装 00 安装前的准备 在开始之前,确保已经安装了Docker,本文基于Docker Compose进行示范,没有装Docker Compose也可将其…

深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer理论精简摘要(二)

Dilated Neighborhood Attention Transformer摘要 局部注意力机制:例如滑动窗口Neighborhood Attention(NA)或Swin Transformer的Shifted Window Self Attention。 优点:尽管在降低自注意力二次复杂性方面表现出色, …

Java精品项目源码基于SpringBoot的智慧园区管理系统(v67)

Java精品项目源码基于SpringBoot的智慧园区管理系统(v67) 大家好,小辰今天给大家介绍一个智慧园区管理系统,演示视频公众号(小辰哥的Java)对号查询观看即可 文章目录 Java精品项目源码基于SpringBoot的智慧园区管理系统(v67)难度…

【NI-RIO入门】为CompactRIO供电

在大多数情况下,您可以使用可直接连接系统的电源,例如墙上的电源插座。但是,某些应用程序或环境缺乏可用电源,您必须使用其他电源,例如电池。无论您是否有可用电源,您可能都希望通过为系统提供一些冗余来确…

ZYNQ_project:IIC_EEPROM

EEPROM简介: EEPROM(Electrically Erasable Progammable Read Only Memory, E2PROM)是指带电可擦可编程只读存 储器,是一种常用的非易失性存储器(掉电数据不丢失), E2PROM 有多种类型的产品,我…

为什么我不能给shopify的图片添加alt

首先我们要明白是什么ALT标签,为什么要添加这个标签,这个标签有什么用 ALT标签是什么 ALT属性是HTML的一部分,它为那些无法查看图像的用户提供替代的文本描述。 ALT标签有什么用 使用ALT属性还可以帮助搜索引擎爬虫更好地理解您的网站内容。有…

npm管理发布包-创建与发布

创建与发布 我们可以将自己开发的工具包发布到 npm 服务上,方便自己和其他开发者使用,操作步骤如下 创建文件夹,并创建文件indexjs,在文件中声明函数,使用 module.exports 暴露npm初始化工具包,package.j…

LeetCode Hot100 42.接雨水

题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 方法一(相向双指针):竖着计算面积 代码: class Solution {public int trap(int[] he…

docker 安装elasticsearch集群

准备工作 docker 安装好,docker compose 安装好编辑好docker-compose.yml文件(本文会提供)生成elastic-certificates.p12密钥,与docker-compose文件在同一个目录(本文会介绍生成方式)准备elasticsearch配置…

浅谈Python中的鸭子类型和猴子补丁

文章目录 前言一、鸭子类型二、猴子补丁关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Python 开发者可能…

2020年1月31日 Go生态洞察:pkg.go.dev的未来步骤

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

如何运用AppLink平台中的数据连接器组件

AppLink平台组件组成 AppLink平台组件分成三个板块触发事件组件、基础组件和数据连接器 数据连接器组件里面有10个组件,目前也在不断新增更多的数据连接器,那他们在AppLink平台里的原理、触发动作以及怎么使用呢?接下来用MySQL和TimescaleD…

Text-to-SQL小白入门(九)InstructGPT论文:教你如何训练ChatGPT

论文概述 InstructGPT和ChatGPT 的训练流程基本一致 ,ChatGPT是改进后的InstructGPT,比如InstructGPT是基于GPT-3训练,而ChatGPT是基于GPT-3.5训练。 基本信息 英文标题:Training language models to follow instructions with h…

【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

文章目录 前言创建多媒体Demo工程创建MediaBean 实体类创建MediaHelper工具类API标记弃用问题动态申请多媒体访问权限实现选择图片显示功能打包测试 前言 在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙…

当TinyMCE富文本编辑器遇到Vue3+nuxt+ts项目,分享引入成功案例及过程中踩的那些坑

文章目录 前言遇到的坑插入上传图片插件上传图片请求与返回值处理本地文件引入报错解决源码 前言 如果你的前端项目技术栈使用的是Vue3nuxtts,并且老大让你集成一下那个传说中非常丝滑的TinyMCE富文本编辑器,那么恭喜你和我一样中大奖了。 网上找了好久…