image.convert()函数转换格式及显示图像的RGB三通道图像
引 言 视觉任务处理的图片按照图像通道深度分为单通道图像和多通道图像。单通道图像有grayscale灰度图、binary二值图、PNG图,多通道图像有三通道24位真彩色RGB图,8位伪彩色图像,YCbCr图像等。本文先介绍各种格式图像的特点,随后讲解图像的不同加载方法和格式转换语句,图像数据不同存储方式的维度变化,以及如何提取RGB每个通道的图片。
文章目录
- 一、常见图像格式介绍
- 1.1 grayscale灰度图
- 1.2 二值图像
- 1.3 PNG格式图像
- 1.4 RGB格式图像
- 1.5 RGBA图像
- 1.6 8位伪彩色图
- 二、图像加载和格式转换
- 2.1图像加载方式
- 2.1.1 调用`Image.open(img_path)`加载图像
- 2.1.2 调用`cv2.imread(img_path,flags=1)`加载图像
- 2.2 图像格式转换
- 2.2.1 grayscale灰度图
- 2.2.2 二值图像
- 2.2.3 RGB格式图像
- 2.2.4 PNG格式图像
- 2.2.5 RGBA图像
- 2.2.6 YCbCr图像
- 三、区分numpy.array和torch.tensor存储图像维度变化
- 四、RGB各通道图像提取
一、常见图像格式介绍
1.1 grayscale灰度图
灰度图为单通道图像,每个像素值为8bit,像素取值范围:0~255,其中0:黑,255:白,其他像素值表示不同的灰度等级。从RGB图转换成灰度图,像素值转换公式【gray = 0.299R+0.587G+0.114*B】。
示例:模仿灰度图像素值的示例代码及显示效果
img_gray = np.array([[0,120,230],[255,60,150],[100,60,30]])
print('image pixel values:\n',img_gray)
plt.imshow(img_gray,cmap=plt.cm.gray)
plt.title('Display image pixel values')
plt.axis('off') #取消坐标系
plt.show()###
image pixel values:[[ 0 120 230][255 60 150][100 60 30]]
1.2 二值图像
图像中只有两种像素值黑与白,黑:0,白:1。
示例:将上例中的灰度图像转换成二值图
img_gray = np.array([[0,120,230],[255,60,150],[100,60,30]])
#像素值>127变成1,否则变成0
img_binary = np.where(img_gray>127,1,0)
print('binary image pixel values:\n',img_binary)
plt.imshow(img_binary,cmap='gray')
plt.title('Display binary image pixel values')
plt.show()###
binary image pixel values:[[0 0 1][1 0 1][0 0 0]]
1.3 PNG格式图像
png格式图像一般为8bit图像,每个像素值对应+的RGB三分量通过查阅调色板获取。调色板数据样式:
索引号 | R | G | B |
---|---|---|---|
0 | 0 | 0 | 0 |
… | … | … | … |
255 | 255 | 255 | 255 |
- 每个png图片都有属于自己的调色板,调色板获取代码如下
img_path = r'F:\pytorch_project\panda.png'
image = Image.open(img_path).convert('P')if image.mode == 'P':palette = image.getpalette()
else:print('picture has no palette')
- 打印调色板信息列举了两种常用的方法。方法一:由于调色板每个索引编号对应三个颜色分量,所以可以对调色板列表直接变成ndarray变成最后维度为3的数组后转换成列表,并将结果变成字典
{索引号:color元素}
。方法二:对列表中相邻3个元素封装成一个颜色元组。
# 方法一:对palette直接变形
palette_reshape = np.reshape(palette, (-1, 3)).tolist()
# 转换成字典子形式
palette_dict = dict((i, color) for i, color in enumerate(palette_reshape))
print(palette_dict)
print('-'*50)
# 方法二:对列表中相邻3个元素封装成一个颜色元组
palette_dict = {}
for i in range(0,len(palette),3):color = (palette[i],palette[i+1],palette[i+2])palette_dict[i//3] = colorprint(palette_dict)
- 将字典数据存入json格式文件中。
#将字典写入文件
json_str = json.dumps(pd)
with open("palette.json", "w") as f:f.write(json_str)
1.4 RGB格式图像
传统的红绿蓝三色图有三个通道,每个通道分量用8bit,取值范围:0~255,每个像素值共有24bit。
1.5 RGBA图像
图像为32bit,前24bit存储RGB三通道像素值,最后8bit存储透明度信息。
1.6 8位伪彩色图
每个像素值代表图像像素表的索引地址,在像素表中RGB三分量不完全相同。
索引号 | R | G | B |
---|---|---|---|
红 | 255 | 0 | 0 |
绿 | 0 | 255 | 0 |
… | … | … | … |
黄 | 255 | 255 | 0 |
二、图像加载和格式转换
2.1图像加载方式
图像加载可以通过调用PIL
库加载,也可以调用cv2
库加载图像。
2.1.1 调用Image.open(img_path)
加载图像
img_path = r'F:\pytorch_project\plane.jpg'
image = Image.open(img_path)
img = np.array(image)
2.1.2 调用cv2.imread(img_path,flags=1)
加载图像
flags属性
:flags=0,提取单通道黑白图像。flags=1提取三通道彩色图像。
注意:cv2.imread()
提取的彩色图像格式为【H,W,C】,最后的通道维度顺序是BGR,在使用过程中需要对最后一个维度的数据进行转置操作变成熟悉的RGB格式(使用列表转置操作list[::-1])。
# 1.提取单通道图片并展示
img_path = r'F:\pytorch_project\plane.jpg'
image = cv2.imread(img_path,flags=0)
img = np.array(image)
plt.imshow(img,cmap='gray')
plt.show()# 2.提取彩色图片并展示
img_path = r'F:\pytorch_project\plane.jpg'
image = cv2.imread(img_path,flags=1)
img = np.array(image)
plt.imshow(img[:,:,::-1])
plt.show()
也可以使用cv2模块内的imshow()
显示图片,但是需要设置关闭窗口的按键响应。
img_path = r'F:\pytorch_project\plane.jpg'
image = cv2.imread(img_path,flags=1) img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('image',img_gray)## 键入esc时退出,s保存退出
k = cv2.waitKey(0)
if k == 27:cv2.destoryAllWindows()
elif k == ord('s'):cv2.imwrite('img_1.jpg', img_gray)cv2.destoryAllWindows()
2.2 图像格式转换
图像转换成项目需要的格式调用函数为:Image.open(img_path).convert(format_str)
format_str
参数:**‘RGB’,‘L’, ‘1’,‘P’,‘RGBA’, ‘YCbCr’**等。
2.2.1 grayscale灰度图
可以从RGB图通过提取各通道像素值经过公式运算转换成灰度图,实现公式【gray = 0.299R+0.587G+0.114*B】,也可以直接调用语句img.convert('L')
或’'转换格式。
image = Image.open(img_path).convert('L')
plt.imshow(image,cmap='gray')
plt.show()
此外,img.convert('I')
表示32位整型灰度图,img.convert('F')
表示32为浮点型灰度图。
2.2.2 二值图像
image = Image.open(img_path).convert('1')
2.2.3 RGB格式图像
image = Image.open(img_path).convert('RGB')
2.2.4 PNG格式图像
image = Image.open(img_path).convert('P')
2.2.5 RGBA图像
图像为32bit,前24bit存储RGB三通道像素值,最后8bit存储透明度信息,语法为:
image = Image.open(img_path).convert('RGBA')
2.2.6 YCbCr图像
YCbCr图为24bit彩色图,Y表示亮度通道,Cb和Cr表示两个色度通道,肉眼对亮度通道敏感,对两个色度通道进行下采样。语法为:
image = Image.open(img_path).convert('YCbCr')
除了上面介绍的使用PIL
库的convert()
函数进行格式转换,也可以使用cv2.cvtColor()
函数进行图像格式转换。
三、区分numpy.array和torch.tensor存储图像维度变化
numpy.ndarray
存储的图像维度为(宽、高、通道)【W,H,C】,torch.tensor
存储的图像维度为(通道、宽、高)【C,W,H】,在使用过程中要根据具体使用需求对图像矩阵进行维度转换。
import numpy as np
from PIL import Image
from torchvision import transformsimg_path = r'F:\pytorch_project\plane.jpg'image = Image.open(img_path).convert('RGB')# image变成numpy.ndarray
img_np = np.array(image)
# image变成torch.tensor
img_tensor = transforms.ToTensor()(image)print("numpy.array shape: {}".format(img_np.shape))
print("torch.tensor shape: {}".format(img_tensor.shape))###
numpy.array shape: (1200, 1920, 3)
torch.tensor shape: torch.Size([3, 1200, 1920])
四、RGB各通道图像提取
对RGB各图层图像提取并展示有利于更直观了解图像的情况。
import numpy as np
from PIL import Image
import matplotlib.pyplot as pltimg_path = r'F:\pytorch_project\plane.jpg'# 获取图像数据
image = Image.open(img_path).convert('RGB')
img = np.array(image)img_list = []# 获取各通道图层数据
for i in range(img.shape[-1]):temp = np.zeros_like(img)temp[...,i] = img[:,:,i]img_list.append(temp)# 图像展示
fig,axes = plt.subplots(1,3)
titles = ['the image of {} channel'.format(channel) for channel in ['R','G','B']]for i in range(len(img_list)):axes[i].imshow(img_list[i])axes[i].set_title(titles[i])plt.show()
相关文章:
image.convert()函数转换格式及显示图像的RGB三通道图像
引 言 视觉任务处理的图片按照图像通道深度分为单通道图像和多通道图像。单通道图像有grayscale灰度图、binary二值图、PNG图,多通道图像有三通道24位真彩色RGB图,8位伪彩色图像,YCbCr图像等。本文先介绍各种格式图像的特点,随后讲…...
进程学习
今天开始了进程的学习,主要讲了进程的一些命令以及进程的创建、进程的调度、进程相关的函数接口和进程消亡。在函数接口中要注意子进程和父进程的关系以及回收顺序,避免出现僵尸进程。...
【Rabbitmq的消息模型】
消息队列的特性 durable:队列持久化。如果设置持久化,那么无论RabbitMQ在关闭时,就会将队列存储到本地磁盘,无论宕机还是重启,队列也不会删除;如果设置不持久化,那么在RabbitMQ关闭时ÿ…...
The Ether: EvilScience (v1.0.1)打靶渗透【附代码】(权限提升)
靶机下载地址: https://www.vulnhub.com/entry/the-ether-evilscience-v101,212/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 00:0C:29:7F:50:FB 1.2. 端口扫描 nmap -p- 192.168.7.172 1.3. 目录扫描 dirb http://192.16…...
java学习day18MyBatis2
MyBatis2 缺点 编写SQL语句工作量较大,对开发人员编写SQL语句的功底有一定的要求。 SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库 优点 MyBatis是免费且开源的。 与JDBC相比,减少了50%以上的代码量。 MyBat…...
算法巩固——旅行商问题
旅行商问题(Traveling Salesman Problem, TSP)简介 问题描述 旅行商问题是一个经典的组合优化问题,具体描述如下: 输入:一组城市及其两两之间的距离(或成本)。目标:找到一条从一个…...
ArcMap如何将shp数据导入oracle数据库
1. 连接数据库 2.在数据库中新建要素类 3.设置要素类名称和别名以及要素类型 4. 选择该要素类的坐标系 5.导入字段,点击导入,选择shp文件,点击添加,字段就导入进来了,点击完成 6. 点击刚才创建的要素类,点击…...
AppBoot:像 Django 一样使用 FastAPI
App Boot 开发 AppBoot 的背景是我一直没能寻找到满意的 FastAPI 项目模板。相比之下,Django 的项目结构和开发方式一直深得我心,因此我决定创建一个类似 Django 的 FastAPI 项目模板。 AppBoot 完全采用异步模式,内置 SQLAlchemy 2.0&…...
2024实验班选拔考试(热身赛)
比赛传送门 邀请码:2024wksyb A. 简单的数列问题 签到,记得开long long。 #include<bits/stdc.h> #define rep(i,a,b) for (int ia;i<b;i) #define per(i,a,b) for (int ia;i>b;--i) #define se second #define fi first #define endl …...
go语言的actor框架和air工具有什么区别?
Go语言的Actor框架和Air工具在多个方面存在显著的区别,主要体现在它们的设计目的、功能特性以及应用场景上。 ### Go语言的Actor框架 **设计目的与功能特性**: * **设计目的**:Actor框架是专为高并发和分布式系统设计的编程模型。它通过将系统…...
文件上传漏洞-HackBar使用
介绍 HackBar 是一个用于浏览器的扩展插件,主要用于进行网络渗透测试和安全评估。它提供了一系列方便的工具和功能,可以帮助用户执行各种网络攻击和测试,包括 XSS、SQL 注入、CSRF、路径穿越等 下载地址 可以到github上面去下载࿰…...
多层次算力网络;雾计算和边缘计算区别
目录 多层次算力网络 云计算 雾计算 边缘计算 海计算 相互协作 雾计算和边缘计算 一、概念与定义 二、目标与实现方式 三、应用场景 四、总结 多层次算力网络 涉及云计算、雾计算、边缘计算和海计算等技术之间的相互协作,这些技术各自具有不同的特点和覆盖范围,能…...
JavaDS —— 红黑树
前言 还是一样,这里的红黑树重点讲述插入代码的实现,如果对红黑树的删除感兴趣,可以去翻阅其他资料。 在数据结构专栏中已经对 AVL 树的旋转调整做了分析和讲解,这里红黑树也会使用到旋转调整的代码,就不讲述旋转代码…...
Python爬虫技术 第27节 API和RESTful服务
Python 爬虫技术是一种自动化获取网页内容的方法,通常用于数据收集、信息抽取或自动化测试。在讲解 Python 爬虫技术时,我们通常会涉及到以下几个关键概念: HTTP 请求:爬虫通过发送 HTTP 请求来获取网页内容,这是爬虫与…...
进程创建,进程消亡
虚拟地址:通过虚拟技术,将外部存储设备的一部分空间,划分给系统,作为在内存不足时临时用作数据缓存。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。 练习: 编写一个代码实现,一个父…...
完美解决pip命令版本冲突导致对应版本模块包无法安装的问题
解决步骤 使用pip更新/降低指定模块包命令格式降低pip自身至指定版本的命令再次换源安装指定模块包 在对 FasterNet 这篇论文源码复现过程中,我们首先需要安装相关依赖文件( path/to/your/requirements.txt) -extra-index-url https://down…...
openssl 制作 信用库与服务证书
文章目录 前言openssl 制作 信用库与服务证书1. CA 证书2. 服务器证书/秘钥库3. 创建信用库4. 注意事项 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会…...
用Python打造精彩动画与视频,7.3 使用OpenCV在视频生成中的应用
第七章:高级视频和动画技术 7.3 使用OpenCV在视频生成中的应用 在本节中,我们将探索如何使用OpenCV进行一些基本的视频生成和增强技术。这些技术包括视频帧的叠加、视频剪辑、视频滤波等,通过这些技术可以提升视频的表现力。 7.3.1 素材准…...
记录一次Nacos安装启动异常的问题
今天在Linux中启动Nacos遇到了一个这样的错误: ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !! 解决办法: 1:查看JAVA_HOME配置: vi /etc/profile 2ÿ…...
.NET C# Dictionary Hashtable
.NET C# Dictionary & Hashtable 文章目录 .NET C# Dictionary & Hashtable1 Dictionary1.1 底层实现1.2 优点1.3 缺点 2 Hashtable2.1 底层实现2.2 优点2.3 缺点 3 对比总结4 遍历方式,与耗时对比foreach遍历Keys遍历IDictionaryEnumerator遍历耗时对比 1 …...
Spring Boot + Vue(4)授权查看信息
前言 在SpringBoot和Vue的组合中,实现一个查看商品详情信息需商品主人授权的功能,涉及到前后端的协作以及权限管理的设计。以下是一个基本的实现步骤和概念介绍: 一. 设计数据库模型 首先,你需要设计数据库模型来存储商品信息、用…...
面试经典 222. 完全二叉树的节点个数
二叉树我最近刷的特别多,差不多快刷完了,但是有一种题型差点给我忽略了,那就是完全二叉树,这也是一个很重要的题型,今天刚好有一道题目可以来复习一下完全二叉树的特性 题目链接如下:https://leetcode.cn/…...
基于springboot+vue+uniapp的“口腔助手”小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...
Rider中修改默认文件关联,自定义打开方式
问题描述 想用Qt designer打开.ui文件,但是在Rider中,IDE会默认通过text进行打开 解决方法 1,允许用户将特定的文件类型与一个应用程序关联起来 File -> Settings -> Editor -> File Types -> Recognized File Types下&…...
【python】Linux升级版本
目的 迁移项目包路径到服务器上 查看服务器包是否和本地已有项目python版本相同然后发现~嗯不一样 项目上包时用的3.8~ 服务器用的2.7 查看方法: python -version解决方案 一:项目所有包重新下载 二:升级服务器python版本 第二种步骤&…...
CLOS架构
CLOS Networking CLOS Networking 是指使用 Clos 网络拓扑结构(Clos Network Topology)进行网络设计的一种方法。该方法是由贝尔实验室的工程师 Charles Clos 在1950年代提出的,以解决电路交换网络的可扩展性和性能问题。随着现代计算和网络…...
【HarmonyOS NEXT星河版开发学习】小型测试案例01-今日头条置顶练习
个人主页→VON 收录专栏→鸿蒙开发小型案例总结 基础语法部分会发布于github 和 gitee上面 前言 本系列可能是博客首发,鸿蒙开发星河版是一个全新的版本,由于参考视频较少鸿蒙开发不被重视导致csdn上面并没有全套的学习路线,…...
部署Springboot + Vue 项目到远程服务器Windows10系统的详细配置
远程服务器操作系统为Windows系统,Java程序环境,Maven环境都安装有,Mysql ,Redis等都有的前提下 1. mysql数据库导入,非常简单很好操作,这里省略。。比如用HeidiSql 或者Navicat 工具导入数据库 2. 后端javaSpringb…...
Linux笔记-3()
目录 一、Linuⅸ实操篇-定时任务调度 二、Linuⅸ实操篇-Linuⅸ磁盘分区、挂载 三、Linux实操篇-网络配置 一、Linuⅸ实操篇-定时任务调度 1 crond任务调度---crontab进行定时任务的设置1.1 概述任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度分类…...
【深度学习】【语音】TTS,StyleTTS 2,论文
StyleTTS 2 是一款创新的文本转语音(TTS)模型,通过使用样式扩散和大规模语音语言模型(SLM)的对抗训练,实现了接近人类水平的TTS合成。以下是StyleTTS 2在技术上的几个关键点和其在性能上的突出表现: 技术重点 样式扩散(Style Diffusion): StyleTTS 2 将语音样式建模…...
C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结
最近用set比较多,复习一下基础。 在C中,vector、deque、list、set、multiset、unordered_set和unordered_multiset都是容器类,但它们有不同的特点和用途。下面是对它们的区别和示例说明: 1. vector 特点: 动态数组,…...
手机在网状态接口如何对接?(一)
一、什么是手机在网状态? 传入手机号码,查询该手机号的在网状态,返回内容有正常使用、停机、在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态。 二、手机在网状态使用场景? 1.信贷审核&#…...
淘宝采集 淘宝爬虫软件准确获取商家电话号码
淘宝爬虫软件对现代IT产生了多方面的影响。 首先,淘宝爬虫软件使得用户可以从淘宝等电商平台中获取大量的商品信息,方便用户进行价格比较和商品搜索。用户可以根据自己的需求,通过爬虫软件获取到各种商品的价格、销量、评价等数据࿰…...
4.1+4.2串的模式匹配
4.2.1简单的模式匹配算法 把所有可能的情况都匹配一遍 int Index(SString S,SSTring T){int i1,j1;while(i<s.length&&j<T.length){if(S.ch[i]T.ch[i]){i; j;}else{ ii-j2;}}if(j>T.length){renturn i-T.length;}else{return 0;}} 4.2.2KMP算法...
HTML前端面试基础(一)
HTML面试题可以涵盖多个方面,包括HTML基础、HTML5新特性、标签语义化、元素分类、属性理解等。以下是一些常见的HTML面试题及其简要答案: 1. HTML基础 问题: 请解释一下HTML文档的基本结构。 答案: HTML文档的基本结构包括<…...
Milvus Cloud架构详解:构建高效、可扩展的向量数据库系统
在大数据与人工智能蓬勃发展的今天,向量数据库作为处理高维数据、支持高效相似性搜索的关键技术,正逐步成为众多应用场景中的核心组件。Milvus Cloud,作为一款专为AI设计的开源向量数据库,凭借其独特的分布式架构,不仅实现了存储与计算的分离,还提供了强大的水平扩展能力…...
【递归】用递归的方法求阶乘
用递归的方法求 阶乘,这里我们以 求5!为例,使用C语言实现 #include<stdio.h>int fact(int n){if(n1){return 1;}elsereturn n*fact(n-1); }int main(){int result;resultfact(5);printf("5的阶乘是 :%d",result)…...
Python 爬虫项目实战三:GitHub 用户信息抓取与分析
一、项目背景 爬虫技术不仅限于获取网页内容,还可以用于获取和分析特定网站的用户信息。本文将演示如何使用Python编写爬虫程序,从GitHub网站抓取用户信息,并进行简单的数据分析。 二、环境准备 在开始之前,请确保你已经安装了…...
【重整化群1(补)】
4. KT 相图,O(3) 相图 O(3) - 非线性Sigma model O(3)自由场 - 归一化序参量: F 1 2 ρ ∫ d d x ( ∇ m ⃗ ) 2 Z ∫ D [ m ⃗ ] δ ( m 2 − 1 ) \begin{aligned} & F \frac{1}{2\rho} \int d^d x (\nabla \vec m)^2 \\ & Z \int D[\vec…...
力扣第五十三题——最大子数组和
内容介绍 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出&…...
java: 程序包javax.validation.constraints不存在
1.遇到的问题 java: 程序包javax.validation.constraints不存在 2.引起原因 springboot升级到了2.5.15版本 3.解决办法 方案一:将项目中SpringBoot版本降到2.3.3及以前的版本 比如降到2.4.4 <dependency> <groupId>org.springframework.boot<…...
通用前端的学习
通用前端的概念 通用前端的概念是我自创的,也是我多年开发全栈时的个人理解,结合自己对各种语言的比较,发现前端都具有几个特征,而这几个特征,很多人只能用具体的表象来描述,比如用安卓方式来说明…...
MacBook2024非常出色的虚拟机软件Parallels Desktop19.3中文免费版本
最近我被问得最多的一个问题就是:能不能在一台设备上同时使用Windows系统和macOS系统?答案当然是肯定的,你只需要一款虚拟机软件就能轻松实现。今天,我就来为大家安利一款非常出色的虚拟机软件——Parallels Desktop19。 这款软件…...
香橙派aipro安装TensorFlow,部署手册
香橙派(Orange Pi)是一款类似于树莓派(Raspberry Pi)的单板计算机,广泛应用于各种嵌入式系统和DIY项目。要在香橙派上安装TensorFlow并进行部署,可以按照以下步骤进行: 1. 准备工作 确保系统更新:首先,确保你的香橙派系统是最新的。sudo apt-get update sudo apt-get…...
Cyberchef实用功能之-URL/IP地址无害化操作
网络安全领域会共享URL,IP,domain等威胁情报信息,尤其是在攻防演练,重保活动,护网hvv的场景及时的威胁情报共享至关重要。这些IP/domain/URL 可能来自于沙箱的报告,pcap的提取,恶意软件的提取&a…...
索引小tips
一、优化原则 关于创建索引: 1. 【强制】InnoDB表必须主键为id int/bigint auto_increment,且主键值禁⽌被更新 。 2. 【强制】InnoDB和MyISAM存储引擎表,索引类型必须为 BTREE 。 3. 【建议】主键的名称以 pk 开头,唯⼀键以…...
洛谷题单算法1-6二分查找与二分答案
P2249 【深基13.例1】查找 #include<iostream> using namespace std; const int N1e65; int n,m,a[N]; int main(){ios::sync_with_stdio(false);cin>>n>>m;for(int i1;i<n;i) cin>>a[i];for(int i1;i<m;i){int t0;cin>>t;int left1,righ…...
《人有人的用处》[笔记]
Kola make tester colourful Cool, Simple and Work! Kola 首页 ApiHug Tester Framework Kola - ApiHugKola make your test life happyhttps://apihug.com/zhCN-docs/kola Kola 目标 全面支持DSL,类BDD, Contract 定义测试 引入 wire 端 kolaTest 测试任务 无缝集成所有现…...
动态规划之——背包DP(进阶篇)
文章目录 概要说明多重背包(朴素算法)模板例题思路code 多重背包(二进制优化)模板例题思路code 多重背包(队列优化)模板例题思路 混合背包模板例题思路code1code2 二维费用背包模板例题思路code 概要说明 本文讲多重背包、混合背包以及二维费用背包&…...
工具学习_CONAN_Consuming Packages
1. Build a simple CMake project using Conan 首先创建一个使用最流行的 C 库之一 Zlib 的字符串压缩器应用程序,教程将使用 CMake 构建系统,但需要注意 Conan 适用于任何系统构建方式。 为了完成教程,首先下载对应的项目: git…...