当前位置: 首页 > news >正文

汕头网页建站模板跨境电商到什么网站做

汕头网页建站模板,跨境电商到什么网站做,中小企业管理软件排名,平面广告设计网站目录 1.基础知识 1.图像几何变换概念 2.图像几何变换方式 3.插值运算 4.几何变换步骤 2.各类变换 1.位置变换 2.形状变换 3.代数运算 3.实战演练 1.基础知识 1.图像几何变换概念 在图像处理过程中#xff0c;为了观测需要#xff0c;常常需要对 图像进行几何变换为了观测需要常常需要对 图像进行几何变换如几何失真图像的校正、图 像配准、电影、电视和媒体广告等的影像特技处 理等是图像变形以及校正变形的基础。图像几何变换将图像中任一像素映射到一个新位置是一种空间变换关键在于确定图像中点与点之间的映射关系 2.图像几何变换方式  首先有齐次坐标用n1维向量表示n维向量的方法称为齐次坐标 表示法。原图像用点集(转置的意思表示。好处齐次坐标中对原图像进行平移、缩放、旋转等 几何变换可用一个变换矩阵表示。然后是变换矩阵a,b,c,d用于图形的比例、对称、 错切、旋转等基本变换k,m用于 图形的平移变换p,q用于投影变 换s用于全比例变换。 实现2D图像几何变换的基本变换的一般过程是变换矩阵T×变换前的点集矩阵变换后的点集矩阵。  3.插值运算 为什么会有这玩意当你调整图像的大小特别是缩小图像时由于目标大小的像素数量少于原图像的像素数量就需要通过插值算法来估算新像素的值。在进行旋转、平移、拉伸等几何变换时图像的像素位置可能会发生变化比如原x,y的像素点变成0.8x,0.9y算出来是个小数则相应位置像素值不知道是多少应用一些滤波器或处理器时如模糊、锐化等操作会导致像素值的变化需要通过插值来重新计算像素值。 概念指利用已知邻近像素点的灰度值来产生未知像素点的灰度值各通道 常用插值运算方法 最近邻插值非整数像素灰度值就等于距离最近 的坐标都为整数的像素的灰度值。 双线性插值利用非整数像素点周围的四个像素 点的相关性通过双线性算法计算得出。图1算法或图2算法利用周边四个点。 双三次插值利用非整数像素点周围的16个像素 点进行计算。 4.几何变换步骤  根据不同的几何变换公式计算新图像的尺寸根据几何变换的逆变换对新图像中的每一点确 定其在原图像中的对应点按对应关系给新图像中各个像素赋值 若新图像中像素点在原图像中的对应点坐标存 在直接赋值若新图像中像素点在原图像中的对应点坐标超 出图像宽高范围直接赋背景色若新图像中像素点在原图像中的对应点坐标在 图像宽高范围内采用插值的方法计算  2.各类变换  1.位置变换 图像的位置变换是指图像的大小和形状不发生变化只是图像像素点的位置发生变化含平 移、镜像、旋转平移若不想丢失信息可能需要扩大画布 镜像M为总行数N为总列数  旋转 θ为正代表逆时针旋转若要确定变换后的尺寸大小计算原图像四个角在 旋转后的坐标确定新图像的分辨率Mmax x-min x1;Nmax y-min y1结果向上取整.对于不在原点旋转的先要将坐标系平移到原点再按绕原点旋转进行变换然后平移回原坐标原点。得到新图像的M,N后需依次确定[0,M-1]minx,[0,N-1]miny各个像素点的值。也就是再逆变换回去根据步骤第三点的三条进行赋值。 2.形状变换 缩放 错切平面景物在投影平面上的非垂直投 影使图像中的图形产生扭变   3.代数运算  加法运算如下图应用主要有多幅图像相加求平均去除叠加性噪声将一幅图像的内容经配准后叠加到另一幅图像 上去以改善图像的视觉效果在多光谱图像中通过加法运算加宽波段如 绿色波段和红色波段图像相加可以得到近似全色图像用于图像合成和图像拼接。 减法运算如下图应用主要有显示两幅图像的差异检测同一场景两幅图像 之间的变化去除不需要的叠加性图案加性图案可能是缓 慢变化的背景阴影或周期性的噪声或在图像 上每一个像素处均已知的附加污染等图像分割如分割运动的车辆减法去掉静止 部分剩余的是运动元素和噪声生成合成图像。  乘法运算主要是部分图框出来也就是图像的局部显示和提取用二值模板图像与 原图像做乘法来实现 。 逻辑运算原理如图。 3.实战演练  P1. 试编写程序对图像逆时针旋转60°采用双线性插值的方法 from PIL import Image # 导入PIL库用于图像处理 import math #用于旋转时计算三角函数def bilinear_interpolation(image, x, y):# 将坐标转换为整数x1, y1 int(x), int(y)x2, y2 x1 1, y1 1# 处理边界情况if x2 image.width:x2 x1if y2 image.height:y2 y1# 获取四个相邻像素的RGB值q11 image.getpixel((x1, y1))q21 image.getpixel((x2, y1))q12 image.getpixel((x1, y2))q22 image.getpixel((x2, y2))r []#空列表的创建# 处理 RGB 值的每个通道for i in range(3): # 0: 红色通道, 1: 绿色通道, 2: 蓝色通道r.append(q11[i] * (x2 - x) * (y2 - y) q21[i] * (x - x1) * (y2 - y) q12[i] * (x2 - x) * (y - y1) q22[i] * (x - x1) * (y - y1))return tuple(map(int, r)) # 返回处理后的 RGB 值def rotate_image(image, angle):# 旋转图像函数angle angle % 360if angle 0:return imagerotated_image Image.new(RGB, image.size) # 创建旋转后的图像对象for x in range(rotated_image.width):for y in range(rotated_image.height):# 计算旋转后的坐标,即逆变换找到原坐标位置x_original ((x - rotated_image.width / 2) * math.cos(math.radians(angle)) -(y - rotated_image.height / 2) * math.sin(math.radians(angle)) image.width / 2)y_original ((x - rotated_image.width / 2) * math.sin(math.radians(angle)) (y - rotated_image.height / 2) * math.cos(math.radians(angle)) image.height / 2)if 0 x_original image.width - 1 and 0 y_original image.height - 1:# 应用双线性插值rotated_image.putpixel((x, y), bilinear_interpolation(image, x_original, y_original))#注意写法这个函数第二个参数是元组表示的一组rgb的值return rotated_image# 打开图像文件 image Image.open(rainbow.jpg)# 逆时针旋转60° rotated_image rotate_image(image, 60)# 保存旋转后的图像 rotated_image.save(rotated_image.jpg) # 保存旋转后的图像 说明map(int, r): 这部分使用了Python内置的 map 函数它接受一个函数和一个可迭代对象作为参数。在这里int 函数被应用于可迭代对象 r 中的每个元素将每个元素转换为整数。tuple(...): tuple() 函数用于将一个可迭代对象转换为元组tuple。在这里map(int, r) 返回一个迭代器然后 tuple() 将这个迭代器转换为一个由整数组成的元组。 P2. 打开一幅图像依次完成下列要求顺时针旋转20°做水平镜像做错切变换缩小图像。若需要插值运算采用双线性插值方法要求输出显示原图、中间结果和最后结果。作为模板题 import math #用于旋转时计算三角函数 from PIL import Imagedef resize_image(image, width_scale, height_scale):# 获取图像的宽度和高度width, height image.size# 计算放大或缩小后的宽度和高度new_width int(width * width_scale)new_height int(height * height_scale)# 创建一个新图像对象用于存储放大或缩小后的图像resized_image image.resize((new_width, new_height))return resized_imagedef shear_image(image, shear_factor):# 获取图像的宽度和高度width, height image.size# 计算错切后的宽度,只需计算宽度即可new_width width int(abs(shear_factor) * height)# 创建一个新图像对象用于存储错切后的图像sheared_image Image.new(RGB, (new_width, height))# 错切处理for x in range(new_width):for y in range(height):# 计算错切后的坐标逆旋转new_x x - int(shear_factor * y)if 0 new_x width:# 获取原始图像中的像素值pixel image.getpixel((new_x, y))# 将像素值复制到错切图像中sheared_image.putpixel((x, y), pixel)return sheared_imagedef mirror_image(image):# 获取图像的宽度和高度width, height image.size# 创建一个新图像对象用于存储镜像后的图像mirrored_image Image.new(RGB, (width, height))# 镜像处理for x in range(width):for y in range(height):# 获取原始图像中的像素值pixel image.getpixel((x, y))# 将像素值复制到镜像图像中但是在水平方向上镜像mirrored_image.putpixel((width - x - 1, y), pixel)return mirrored_imagedef bilinear_interpolation(image, x, y):# 将坐标转换为整数x1, y1 int(x), int(y)x2, y2 x1 1, y1 1# 处理边界情况if x2 image.width:x2 x1if y2 image.height:y2 y1# 获取四个相邻像素的RGB值q11 image.getpixel((x1, y1))q21 image.getpixel((x2, y1))q12 image.getpixel((x1, y2))q22 image.getpixel((x2, y2))r []#空列表的创建# 处理 RGB 值的每个通道for i in range(3): # 0: 红色通道, 1: 绿色通道, 2: 蓝色通道r.append(q11[i] * (x2 - x) * (y2 - y) q21[i] * (x - x1) * (y2 - y) q12[i] * (x2 - x) * (y - y1) q22[i] * (x - x1) * (y - y1))return tuple(map(int, r)) # 返回处理后的 RGB 值def rotate_image(image, angle):# 旋转图像函数angle angle % 360if angle 0:return imagerotated_image Image.new(RGB, image.size) # 创建旋转后的图像对象for x in range(rotated_image.width):for y in range(rotated_image.height):# 计算旋转后的坐标,即逆变换找到原坐标位置x_original ((x - rotated_image.width / 2) * math.cos(math.radians(angle)) -(y - rotated_image.height / 2) * math.sin(math.radians(angle)) image.width / 2)y_original ((x - rotated_image.width / 2) * math.sin(math.radians(angle)) (y - rotated_image.height / 2) * math.cos(math.radians(angle)) image.height / 2)if 0 x_original image.width - 1 and 0 y_original image.height - 1:# 应用双线性插值rotated_image.putpixel((x, y), bilinear_interpolation(image, x_original, y_original))#注意写法这个函数第二个参数是元组表示的一组rgb的值return rotated_image# 打开图像文件 image Image.open(rainbow.jpg) image.show()# 逆时针旋转-20° rotated_image rotate_image(image, -20) rotated_image.show()mirrormirror_image(rotated_image) mirror.show()shareshear_image(mirror,2) share.show()resizeresize_image(share,0.2,0.2) resize.show() P3. 打开两幅图像利用几何变换、图像代数运算生成一幅精美的合成图像 from PIL import Imagedef resize_image(image, width_scale, height_scale):# 获取图像的宽度和高度width, height image.size# 计算放大或缩小后的宽度和高度new_width int(width * width_scale)new_height int(height * height_scale)# 创建一个新图像对象用于存储放大或缩小后的图像resized_image image.resize((new_width, new_height))return resized_imagedef add_images(sun_image, sky_image, output_path):# 获取太阳图像和天空图像的宽度和高度sun_width, sun_height sun_image.sizesky_width, sky_height sky_image.size# 确保太阳图像完全在天空图像内if sun_width sky_width and sun_height sky_height:# 创建一个新的图像对象用于存储混合后的图像result_image Image.new(RGB, (sky_width, sky_height))# 将天空图像复制到结果图像中result_image.paste(sky_image, (0, 0))# 将太阳图像叠加到左上角result_image.paste(sun_image, (0, 0), sun_image)# 保存混合后的图像result_image.show()else:print(Sun image is too large to fit entirely on the sky image.)# 图像文件路径sun_path sun.png sun_image Image.open(sun_path) sun_image.show() sunresize_image(sun_image,0.2,0.2) sky_path sky.jpg output_path result_image.jpg sky_image Image.open(sky_path) sky_image.show() # 执行图像混合操作 add_images(sun, sky_image, output_path) 说明paste函数的使用语法为image.paste(image_to_paste, box, mask)image_to_paste: 要粘贴的图像对象。box: 表示将图像粘贴到另一个图像的位置通常是一个元组 (x, y)表示左上角的坐标。mask: 用于指定一个掩码图像一般而言为数值从0不透明到255透明也可以是一个二值图像如果提供了掩码图像它将根据掩码的像素值来控制被粘贴图像的透明度使得被粘贴图像可以部分透明地展现在目标图像上。 题外话不要吐槽图像的精美程度。
http://www.dnsts.com.cn/news/4122.html

相关文章:

  • 网站系统有哪些东莞保安公司电话
  • 网站建设 需求调研直播app开发哪家好
  • 网站免费做软件有哪些郑州承接各类网站建设
  • 网站建设行业有什么认证吗淄博住房和城乡建设厅网站
  • 北京工程建设交易中心网站东莞智通人才招聘网
  • jsp与asp做的网站班级优化大师下载安装最新版
  • 杭州化妆品网站建设wordpress更换网页logo
  • 软件开发工具包sdkseo策略是什么
  • 东莞网站推广策划活动wordpress 启动wordpress mu
  • 东莞东城网站建设公司成都制作网站公司简介
  • 网站建设要什么大宗商品期货交易平台
  • idc网站建设合肥网页网站制作
  • 网站开发与app开发免费的h5制作网站模板
  • 陕西省建设网官方网站网站的类型及特点
  • wordpress的文件河南网站推广优化
  • 深圳发型网站建设番禺做网站平台
  • 网站布局有哪些网络营销服务策略
  • 隆昌住房和城乡建设官方网站ml域名免费注册
  • 信用网站建设标准wordpress关闭媒体库功能
  • wordpress成品站源码柳州做网站的
  • 网站备案怎么转入不用开源程序怎么做网站
  • 成都网站建设软件深圳做网站比较
  • 电话投放小网站ui设计招聘
  • 济南高新区 网站建设公司广东建设网证件查询
  • 站长综合查询工具网站建设的描述
  • 网站上怎么做企业推广内蒙网站建设seo优化
  • 天津建设厅网站品牌设计logo图片
  • 网站建设部门宣言uniapp跳转内部页面
  • 深圳网站搭建多少钱佛山商城网站制作
  • php门户网站模板下载wordpress .net版本号