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

python进阶之图像编程 pillow扩展库

一、概述

1.1pillow简介

Python Imaging Library (PIL)是python 下的图像处理模块,支持多种格式,并提供强大的图像处理功能,可以通过pip进行安装后使用。

1.2pillow具体应用

Pillow 库是 Python3 最常用的图像处理库,它支持多种图像格式,可以用于图像处理、图像增强、图像合成等。下面是 Pillow 库中的一些常用函数:open():打开一张图片;new():创建一张新的图片;save():保存一张图片;show():显示一张图片;resize():改变图片的大小;crop():裁剪图片;rotate():旋转图片;transpose():翻转图片;convert():转换图片的格式或色彩模式;filter():使用滤镜处理图片;getpixel():获取图片中指定位置的像素值;putpixel():设置图片中指定位置的像素值;paste():将一张图片粘贴到另一张图片上。

1.3快速入门

通过文件创建 Image 对象

通过文件创建 Image 图像对象是最常用的方法

示例:通过文件创建 Image 图像对象

from PIL import Imageimage = Image.open("D://桌面//1.jpeg")  # 创建图像实例
# 查看图像实例的属性
print(image.format, image.size, image.mode)image.show() # 显示图像

 格式转换并保存图像

pillow Image 模块中的 save 函数可以保存图片,除非你指定文件格式,否则文件的扩展名就是文件格式。

from PIL import Image
import os# 打开图片
image_path = "D://桌面//1.png"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 指定输出文件格式
output_format = "jpeg"  # 要保存的文件格式,比如 "PNG"、"JPEG" 等# 创建输出文件名
outfile = f + "." + output_format.lower()# 保存图片并指定文件格式
image.save(outfile, format=output_format)print(f"图片已保存为 {outfile},格式为 {output_format}")
image.show()

save() 函数有两个参数,如果文件名没有指定图片格式,那么第二个参数是必须的,他指定图片的格式。

二、课堂实操

2.1 创建缩略图

创建缩略图 使用 Image.thumbnail( size ), size 为缩略图宽长元组。

示例: 创建缩略图

from PIL import Image
import os# 打开图片
image_path = "D://桌面//1.png"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 指定输出文件格式
output_format = "PNG"  # 要保存的文件格式,比如 "PNG"、"JPEG" 等# 创建输出文件名
outfile = f + "_thumbnail." + output_format.lower()# 创建缩略图
thumbnail_size = (100, 100)  # 缩略图尺寸
image.thumbnail(thumbnail_size)# 保存缩略图并指定文件格式
image.save(outfile, format=output_format)print(f"缩略图已保存为 {outfile},格式为 {output_format}")

2.2剪贴,粘贴、合并图像

2.2.1Image类包含允许您操作图像中的区域的方法。如:要从图像中复制子矩形图像使用 crop() 方法。

2.2.2注意:将子图(region) 粘贴(paste)回原图时,粘贴位置 box 的像素与宽高必须吻合。而原图和子图的 mode 不需要匹配,Pillow会自动处理。

粘贴其它图片

from PIL import Image
import os# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 剪切区域
crop_box = (100, 100, 300, 300)  # 左上角坐标为 (100, 100),右下角坐标为 (300, 300)
cropped_image = image.crop(crop_box)# 打开另一张图片作为粘贴对象
paste_image_path = "D://桌面//2.jpeg"
paste_image = Image.open(paste_image_path)# 调整粘贴对象的尺寸和模式以匹配剪切区域
paste_image = paste_image.resize((crop_box[2] - crop_box[0], crop_box[3] - crop_box[1]))# 在原图上粘贴剪切区域
image.paste(paste_image, crop_box)# 保存合并后的图像
merged_outfile = f + "_merged." + e
image.save(merged_outfile)print(f"合并后的图像已保存为 {merged_outfile}")

当你从一个图像中剪切出一个区域,然后希望将这个剪切出的区域粘贴到另一个图像上时,剪切出的区域和粘贴目标的尺寸和模式(也就是图像的大小和颜色通道等信息)需要匹配,以确保粘贴操作能够成功。

在你的代码中,你已经定义了一个剪切区域 crop_box,这个区域的左上角坐标为 (100, 100),右下角坐标为 (300, 300)。剪切区域的宽度是 300 - 100 = 200,高度是 300 - 100 = 200。

粘贴自身图片

from PIL import Image
import os# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 剪切区域
crop_box = (100, 100, 300, 300)  # 左上角坐标为 (100, 100),右下角坐标为 (300, 300)
cropped_image = image.crop(crop_box)# 在原图上粘贴剪切区域
image.paste(cropped_image, crop_box)# 对粘贴的图像进行颠倒180度
region = image.crop(crop_box)
region = region.transpose(Image.ROTATE_180)# 将颠倒后的图像再次粘贴回原图上
image.paste(region, crop_box)# 保存合并后的图像
merged_outfile = f + "_merged1." + e
image.save(merged_outfile)print(f"合并后的图像已保存为 {merged_outfile}")

2.3几何变换

当使用Pillow(PIL)库的Image模块进行几何变换时,你可以使用rotate()方法或transpose()方法来实现不同类型的旋转和翻转。

使用rotate()方法进行图像旋转:

from PIL import Image# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 定义旋转角度(以度为单位,逆时针方向为正)
angle = 45# 旋转图像
rotated_image = image.rotate(angle)# 保存旋转后的图像
rotated_outfile = f + "_rotated." + e
rotated_image.save(rotated_outfile)print(f"旋转后的图像已保存为 {rotated_outfile}")

使用transpose()方法进行图像翻转:

from PIL import Image# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 对图像进行水平翻转
flipped_image_horizontal = image.transpose(Image.FLIP_LEFT_RIGHT)# 对图像进行垂直翻转
flipped_image_vertical = image.transpose(Image.FLIP_TOP_BOTTOM)# 保存翻转后的图像
flipped_horizontal_outfile = f + "_flipped_horizontal." + e
flipped_image_horizontal.save(flipped_horizontal_outfile)flipped_vertical_outfile = f + "_flipped_vertical." + e
flipped_image_vertical.save(flipped_vertical_outfile)print(f"水平翻转后的图像已保存为 {flipped_horizontal_outfile}")
print(f"垂直翻转后的图像已保存为 {flipped_vertical_outfile}")
out = im.transpose(Image.FLIP_LEFT_RIGHT) # 水平左右翻转
out = im.transpose(Image.FLIP_TOP_BOTTOM) # 垂直上下翻转
out = im.transpose(Image.ROTATE_90) # 逆时针90度
out = im.transpose(Image.ROTATE_180) # 逆时针180度
out = im.transpose(Image.ROTATE_270) # 逆时针270度

 2.4颜色变换

from PIL import Image
import numpy as np# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 改变图像亮度
brightness_factor = 1.5
brightened_image = Image.eval(image, lambda x: min(255, x * brightness_factor))# 修改图像通道颜色
r, g, b = image.split()
new_image = Image.merge("RGB", (b, r, g))# 保存修改后的图像
brightened_outfile = f + "_brightened." + e
new_image.save(brightened_outfile)print(f"修改后的图像已保存为 {brightened_outfile}")

Image.eval() 方法允许我们在像素级别对图像进行操作。在这个示例中,我们使用了一个lambda函数,将每个像素的值乘以亮度因子来改变图像的亮度。

使用 split() 和 merge() 方法来重新排列图像的颜色通道。在这个示例中,我们将原始图像的红色和蓝色通道进行交换,以改变颜色分布。

灰度图像

from PIL import Image# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 将彩色图像转换为灰度图像
gray_image = image.convert("L")# 保存灰度图像
gray_outfile = f + "_gray." + e
gray_image.save(gray_outfile)print(f"灰度图像已保存为 {gray_outfile}")

Pillow(PIL)库支持多种图像模式,每种模式具有不同的颜色通道和像素表示方式。以下是一些常见的图像模式:

  1. RGB("RGB"):每个像素由红色、绿色和蓝色通道组成,是彩色图像的常见模式。
  2. 灰度("L"):每个像素只有一个通道,表示像素的亮度值,用于灰度图像。
  3. RGBA("RGBA"):类似于RGB,还包括一个透明度通道,用于带有透明背景的彩色图像。
  4. CMYK("CMYK"):一种印刷颜色模式,使用青色、洋红色、黄色和黑色通道表示颜色。
  5. HSV("HSV"):使用色相、饱和度和值通道来表示颜色。
  6. 二值化("1"):每个像素只有一个二进制值,用于表示黑白图像。


可以根据需要使用convert()方法将图像从一种模式转换为另一种模式

2.5图像增强 

from PIL import Image, ImageEnhance# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 增强图像亮度
enhancer = ImageEnhance.Brightness(image)
brightened_image = enhancer.enhance(1.5)  # 1.5表示增强的倍数# 增强图像对比度
enhancer = ImageEnhance.Contrast(image)
high_contrast_image = enhancer.enhance(1.5)  # 1.5表示增强的倍数# 增强图像色彩
enhancer = ImageEnhance.Color(image)
colorful_image = enhancer.enhance(1.5)  # 1.5表示增强的倍数# 增强图像锐度
enhancer = ImageEnhance.Sharpness(image)
sharp_image = enhancer.enhance(2.0)  # 2.0表示增强的倍数# 保存增强后的图像
brightened_outfile = f + "_brightened." + e
high_contrast_outfile = f + "_high_contrast." + e
colorful_outfile = f + "_colorful." + e
sharp_outfile = f + "_sharp." + ebrightened_image.save(brightened_outfile)
high_contrast_image.save(high_contrast_outfile)
colorful_image.save(colorful_outfile)
sharp_image.save(sharp_outfile)print(f"亮度增强后的图像已保存为 {brightened_outfile}")
print(f"对比度增强后的图像已保存为 {high_contrast_outfile}")
print(f"色彩增强后的图像已保存为 {colorful_outfile}")
print(f"锐度增强后的图像已保存为 {sharp_outfile}")

其他图像增强功能可以使用 ImageEnhance 模块中的类。从图像创建后,可以使用 ImageEnhance 快速调整图片的对比度、亮度、饱和度和清晰度。

ImageEnhance 方法类型:

ImageEnhance.Contrast(im) 对比度
ImageEnhance.Color(im) 色彩饱和度
ImageEnhance.Brightness(im) 亮度
ImageEnhance.Sharpness(im) 清晰度

 处理单独通道

处理图像的单独通道意味着你可以选择性地对图像的红色、绿色、蓝色或灰度通道进行操作。Pillow(PIL)库允许你通过拆分图像的通道,对每个通道进行处理,然后重新合并通道来生成处理后的图像。

from PIL import Image# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 拆分图像的通道
r, g, b = image.split()# 处理单独的通道
r = r.point(lambda p: p * 0.8)  # 处理红色通道,降低亮度
g = g.point(lambda p: p * 1.2)  # 处理绿色通道,增加亮度
b = b.point(lambda p: p * 0.9)  # 处理蓝色通道,降低亮度# 合并通道
processed_image = Image.merge("RGB", (r, g, b))# 保存处理后的图像
processed_outfile = f + "_processed." + e
processed_image.save(processed_outfile)print(f"处理后的图像已保存为 {processed_outfile}")

处理灰度通道

from PIL import Image# 打开图片
image_path = "D://桌面//1.jpeg"
image = Image.open(image_path)# 获取文件名与后缀
f, e = os.path.splitext(image_path)# 将图像转换为灰度模式
gray_image = image.convert("L")# 处理灰度图像的单独通道
processed_gray_image = gray_image.point(lambda p: p * 0.8)  # 降低亮度# 保存处理后的灰度图像
processed_gray_outfile = f + "_processed_gray." + e
processed_gray_image.save(processed_gray_outfile)print(f"处理后的灰度图像已保存为 {processed_gray_outfile}")

2.6动态图像

Pillow 支持一些动态图像处理(如FLI/FLC,GIF等格式)。TIFF文件同样可以包含数帧图像。

打开动态图像时,PIL 会自动加载序列中的第一帧。你可以使用 seek 和 tell 方法在不同的帧之间移动。

2.7水印

Pillow(PIL)库允许你在图像上添加图像、文字或水印。

图像水印

from PIL import Image# 打开主图像和水印图像
main_image_path = "D://桌面//1.jpeg"
watermark_image_path = "D://桌面//2.jpeg"main_image = Image.open(main_image_path)
watermark_image = Image.open(watermark_image_path)# 将水印图像缩放到合适的大小
watermark_size = (100, 100)  # 替换为合适的尺寸
watermark_image = watermark_image.resize(watermark_size, Image.ANTIALIAS)# 创建一个透明度通道
alpha_channel = Image.new("L", watermark_image.size, 128)  # 128表示透明度(0为完全透明,255为不透明)# 将透明度通道与水印图像合并
watermark_image.putalpha(alpha_channel)# 计算水印位置(右下角)
main_width, main_height = main_image.size
watermark_width, watermark_height = watermark_image.size
x = main_width - watermark_width
y = main_height - watermark_height# 在主图像上添加透明水印
main_image.paste(watermark_image, (x, y), watermark_image)# 保存带有透明水印的图像
watermarked_outfile = f + "_watermarked." + e
main_image.save(watermarked_outfile)print(f"带有透明水印的图像已保存为 {watermarked_outfile}")

文本水印

from PIL import Image, ImageDraw, ImageFont# 打开图片
main_image_path = "D://桌面//1.jpeg"
main_image = Image.open(main_image_path)# 获取文件名与后缀
f, e = os.path.splitext(main_image_path)# 创建一个ImageDraw对象
draw = ImageDraw.Draw(main_image)# 定义水印文本和字体
watermark_text = "Watermark"
font = ImageFont.truetype("arial.ttf", 36)  # 替换为合适的字体路径和大小# 计算水印文本的尺寸
text_width, text_height = draw.textsize(watermark_text, font)# 创建一个透明度通道
alpha_channel = Image.new("L", (text_width, text_height), 128)  # 128表示透明度(0为完全透明,255为不透明)# 创建一个带有透明度的文本图像
watermark_text_image = Image.new("RGBA", (text_width, text_height))
watermark_draw = ImageDraw.Draw(watermark_text_image)
watermark_draw.text((0, 0), watermark_text, fill=(255, 255, 255, 128), font=font)  # 填充颜色和透明度# 计算水印位置(居中)
main_width, main_height = main_image.size
x = (main_width - text_width) // 2
y = (main_height - text_height) // 2# 在主图像上添加文本透明水印
main_image.paste(watermark_text_image, (x, y), watermark_text_image)# 保存带有文本透明水印的图像
watermarked_outfile = f + "_watermarked." + e
main_image.save(watermarked_outfile)print(f"带有文本透明水印的图像已保存为 {watermarked_outfile}")

2.8生成验证码图片

import random
from PIL import Image, ImageDraw, ImageFont# 创建验证码图像
width, height = 200, 100
background_color = (255, 255, 255)  # 白色背景
image = Image.new("RGB", (width, height), background_color)# 创建一个ImageDraw对象
draw = ImageDraw.Draw(image)# 创建一个字体对象
font = ImageFont.truetype("arial.ttf", 48)  # 替换为合适的字体路径和大小# 随机生成4个字符作为验证码
characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
code = "".join(random.choice(characters) for _ in range(4))# 计算每个字符的位置(居中)
text_width, text_height = draw.textsize(code, font)
x = (width - text_width) // 2
y = (height - text_height) // 2# 在图像上绘制验证码
draw.text((x, y), code, fill=(0, 0, 0), font=font)  # 使用黑色填充# 添加干扰线
for _ in range(5):x1 = random.randint(0, width)y1 = random.randint(0, height)x2 = random.randint(0, width)y2 = random.randint(0, height)draw.line((x1, y1, x2, y2), fill=(0, 0, 0), width=2)# 保存验证码图片
captcha_outfile = "captcha.png"
image.save(captcha_outfile)print(f"验证码图片已保存为 {captcha_outfile},验证码为: {code}")

相关文章:

python进阶之图像编程 pillow扩展库

一、概述 1.1pillow简介 Python Imaging Library (PIL)是python 下的图像处理模块,支持多种格式,并提供强大的图像处理功能,可以通过pip进行安装后使用。 1.2pillow具体应用 Pillow 库是 Python3 最常用的图像处理库,它支持多种图像格式&a…...

TiCDC Canal-JSON 消息接收示例(Java 版)

1.引言 业务程序经常会通过各式各样的缓存来提升用户的访问速度。 由于存在缓存,在一些实时性要求较高的场景中,需要在数据变更的同时将数据缓存进行更新或删除。 如果数据本身由其他业务部门提供,就无法在写入的同时做缓存的一致性处理。…...

SQLite、MySQL、PostgreSQL3个关系数据库之间的对比

引言 关系数据模型以行和列的表格形式组织数据,在数据库管理工具中占主导地位。今天还有其他数据模型,包括NoSQL和NewSQL,但是关系数据库管理系统(RDBMS)仍然占主导地位用于存储和管理全球数据。 本文比较了三种实现最…...

开源容灾备份软件,开源cdp备份软件

数据的安全性和完整性面临着硬件问题、黑客攻击、人为错误等各种威胁。在这种环境下,开源容灾备份软件应运而生,通过提供自动数据备份和恢复,有效地保证了公司的数据安全。 一、开源容灾备份软件的定义和作用 开源容灾备份软件是一种基于开源…...

Java合并区间

问题: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例: 示例 1&#xff…...

前端面试:【代码质量与工程实践】单元测试、集成测试和持续集成

在现代软件开发中,确保代码质量是至关重要的。单元测试、集成测试和持续集成是关键的工程实践,用于提高代码的可靠性和可维护性。本文将深入探讨这些概念,以及它们如何在软件开发中发挥作用。 1. 单元测试(Unit Testing&#xff0…...

2023/8/17总结

项目完善: 算法推荐 item-CF 算法推荐我主要写的是协同过滤算法,然后协同过滤算法分成俩种—— 基于用户的 user-CF 基于物品的 item-CF 因为害怕用户冷启动,和数据量的原因 我选择了 item-CF 主要思路是——根据用户的点赞列表&…...

REDIS 7 教程 数据类型-进阶篇

⑥ *位图 bitmap 1. 理论 由0和1 状态表现的二进制位的bit 数组。 说明:用String 类型作为底层数据结构实现的一种统计二值状态的数据类型 位图本质是数组,它是基于String 数据类型的按位操作。该数组由多个二进制位组成,每个二进制位都对应一个偏…...

图文并茂:Python Tkinter从入门到高级实战全解析

目录 介绍什么是Tkinter?准备工作第一个Tkinter程序界面布局事件处理补充知识点 文本输入框复选框和单选框列表框弹出对话框 综合案例:待办事项列表总结 介绍 欢迎来到本篇文章,我们将带您深入了解如何在Python中使用Tkinter库来创建图形用…...

npm和yarn的区别?

文章目录 前言npm和yarn的作用和特点npm和yarn的安装的机制npm安装机制yarn安装机制检测包解析包获取包链接包构建包 总结后言 前言 这一期给大家讲解npm和yarn的一些区别 npm和yarn的作用和特点 包管理:npm 和 yarn 可以用于安装、更新和删除 JavaScript 包。它们提…...

微服务项目容器编排docker-compose.yml、Dockerfile文件模板、相关配置文件、shell脚本

nacos Dockerfile&#xff08;不需要特殊处理&#xff0c;使用docker conpose可以不写&#xff09; # 基础镜像 FROM nacos/nacos-server # author MAINTAINER jianglifeng<jlifengfoxmail.com> RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ &&a…...

算法通过村第三关-数组黄金笔记|数组难解

文章目录 前言数组中出现超过一半的数字数组中只出现一次的数字颜色的分类问题(荷兰国旗问题)基于冒泡排序的双指针&#xff08;快慢指针&#xff09;基于快排的双指针&#xff08;对撞指针&#xff09; 总结 前言 提示&#xff1a;苦不来自外在环境中的人、事、物&#xff0c;…...

【2023】LeetCode HOT 100——矩阵

目录 1. 矩阵置零1.1 C++实现1.2 Python实现1.3 时空分析2. 螺旋矩阵2.1 C++实现2.2 Python实现2.3 时空分析3. 旋转图像3.1 C++实现3.2 Python实现3.3 时空分析4. 搜索二维矩阵 II4.1 C++实现4.2 Python实现4.3 时空分析1. 矩阵置零 🔗 原题链接:...

springboot源码方法

利用LinkedHashSet移除List重复的数据protected final <T> List<T> removeDuplicates(List<T> list) {return new ArrayList<>(new LinkedHashSet<>(list));} SpringFactoriesLoader#loadFactoryNames 加载配置文件...

基于java街球社区网站设计与实现

摘  要 本文主要讲述了基于SpringBootVue模式的街球社区网站的设计与实现。这里所谓的街球社区网站是通过类似于百度贴吧之类的网上论坛使得所有的街球爱好者有一个可以互相交流的平台,并使所有用户可以在社区进行教学视频的观看以及相关体育运动产品的选购,平台的盈利主要靠…...

定时产生不同频率方波

/*----------------------------------------------- 内容&#xff1a;通过定时产生不同频率方波 ------------------------------------------------*/ #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c;头文件包含特殊功能寄存器的定义 /*-…...

Java“牵手”天猫商品sku信息API接口数据,天猫API接口申请指南

天猫平台商品sku属性信息接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品销量接口API是一种用于获取电商平台上商品sku属性数据的接口&#…...

【⑮MySQL | 视图】概述 | 创建 | 查看 | 更新 | 修改 | 删除

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL视图概述 | 创建 | 查看 | 更新 | 修改 | 删除的分享✨ 目录 前言1.视图概述2.创建视图3.查看视图4.更新视图数据5.修改视图6.删除视图总结 1.视图概述 1.1 为什么使用视图&#xff1f; 视图一方面可以帮我们使…...

Linux驱动开发一、RK3568把hello编译到Linux内核中运行。‘rk_vendor_read’未定义的引用

1、在字符设备目录下建立hello目录 ~/Linux/rk356x_linux/kernel/drivers/char/hello 2、进入hello目录&#xff0c;新建hello.c、Makefile、Kconfig三个文件 3、Kconfig是打开make menuconfig配置界面是后的选项&#xff0c;这Kconfig是在字符设备下的。 config HELLOtrist…...

enable_shared_from_this

用途&#xff1a; enable_shared_from_this 是一个基类模板&#xff0c;用于解决在类成员函数中获取类对象的 shared_ptr 的需求。它提供了一种机制&#xff0c;使类能够安全地从成员函数内部获得指向自身的 shared_ptr。 解决对象生命周期管理问题&#xff1a;在某些情况下&…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...