Halcon绘制图形

news2024/9/22 19:04:42

1、ROI是Halcon中的一个很重要的概念,为了减少计算量,只关注待检测物体或该物体周围的一片区域即可(类似于图片裁剪)

* ROI是Halcon中的一个很重要的概念,为了减少计算量,只关注待检测物体或该物体周围的一片区域即可,
* ROI就是图像处理所关注的区域

* read_image 读取图像数据
read_image(Image,'claudia')

* get_image_size 获取图像尺寸
get_image_size(Image,Width,Height)

* dev_open_window 打开窗体
* 参数一、二:表示窗口的左上角的XY坐标。
* 参数三、四:分别表示窗口的宽度和高度。
* 参数五:表示窗口的背景色为黑色。
* 参数六:是窗口的句柄或标识符。
dev_open_window(0,0,Width,Height,'black',WindowHandle)

* dev_display 用于显示图像
dev_display(Image)

* draw_rectangle1 在具体的窗口上绘制一个矩形
* 参数一:绘制的窗体
* 参数二、三:绘制的起点XY坐标
* 参数四、五:绘制的终点XY坐标
* 注意:参数是需要赋值
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)

* gen_rectangle1 创建矩形
* 参数一:矩形的名称
* 参数二、三:起点的XY坐标
* 参数四、五:终点的XY坐标
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)

* reduce_domain 裁剪选中的图像
* 参数一:需要裁剪的图片名字
* 参数二:裁剪的区域
* 参数三:新图片的名字
reduce_domain (Image, Rectangle, ImageReduced)

* draw_circle 绘制圆形
draw_circle(WindowHandle, Row, Column, Radius)
* gen_circle 创建圆形
gen_circle (Circle, Row, Column, Radius)
* reduce_domain 裁剪选中的图像
reduce_domain (ImageReduced, Circle, ImageReduced1)

* draw_rectangle2  绘制旋转矩形
draw_rectangle2 (WindowHandle, Row3, Column3, Phi, Length1, Length2)
* gen_rectangle2 创建旋转矩形
gen_rectangle2 (Rectangle1, Row3, Column3, Phi, Length1, Length2)
* reduce_domain 裁剪选中的图像
reduce_domain (ImageReduced1, Rectangle1, ImageReduced2)

在这里插入图片描述

2、blob图像预处理

blob是指二值图像中连通区域的表示。预处理blob通常包括一系列步骤,例如去噪、形态学操作、特征提取等。

* blob
read_image(Image,'claudia')
get_image_size(Image,Width,Height)
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display(Image)

* 高斯噪声
gauss_distribution (60, Distribution)
* 添加噪声分布
add_noise_distribution (Image, ImageNoise, Distribution)
* 生成图像(保存到本地)这里保存的使‘bmp’格式的图片,第三个参数是保存的路径
* 生成图像保存到本地
* 参数一:句柄
* 参数二:保存的图片格式
* 参数三:保存的路径
* dump_window (WindowHandle, 'bmp', 'D:/Halcon/绘制图形/高斯噪声')

* 均值平滑 (对图像进行平均滤波处理,以降低图像中的噪声。)
mean_image (ImageNoise, ImageMean, 5,5)
dump_window (WindowHandle, 'bmp', 'D:/Halcon课程/绘制图形/均值平滑')

* 中值滤波
* 参数:(输入图像,输出图像,滤波器形状(圆circle、正方形square),尺寸,边界处理方式(持续continued、循环cyclic)median_image (ImageMean, ImageMedian, 'circle', 1, 'mirrored')
dump_window (WindowHandle, 'bmp', 'D:/Halcon/绘制图形/中值滤波1')

median_image (ImageMean, ImageMedian, 'circle', 5, 'mirrored')
dump_window (WindowHandle, 'bmp', 'D:/Halcon/绘制图形/中值滤波5')

median_image (ImageMean, ImageMedian, 'circle', 7, 'mirrored')
dump_window (WindowHandle, 'bmp', 'D:/Halcon/绘制图形/中值滤波7')

* 椒盐噪声分布
sp_distribution (5, 5, Distribution)
add_noise_distribution (ImageMedian, ImageNoise1, Distribution)
dump_window (WindowHandle, 'bmp', 'D:/Halcon/绘制图形/椒盐噪声')

参考文章:median_image

在这里插入图片描述

3、绘制线段(案例)

read_image (Image, 'D:/VisionPro/Images/0.bmp')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)

* 绘制线
* 参数一:句柄
* 参数二、三:起点XY坐标
* 参数四、五:终点XY坐标
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
* 生成线
gen_region_line (Line1, Row1, Column1, Row2, Column2)

* 测量
Line1Param:=[Row1,Column1,Row2,Column2]
* 1、创建后面使用的计量句柄(模型) out
create_metrology_model (MetrologyHandle)

* 2、设置测量模型的图像大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)

* 3、给测量句柄添加要测量的模型
* 参数一:输入的句柄
* 参数二:查找的形状
* 参数三:形状的参数(如果是找线就是起点XY坐标,如果是找圆就是圆心的半径坐标)
* 参数四:要输入卡尺的搜索(测量)长度
* 参数五:要输入卡尺的投影(测量)长度
* 参数六:输入Sigma系数,相当于过滤掉n个像素
* 参数七:输入对比度阈值
* 参数八、九:通用参数设置
* 参数十:计算对象的索引,如果添加了多个对象,方便分辨
add_metrology_object_generic (MetrologyHandle, 'line', Line1Param, 10, 1, 1, 30, [], [], Index)

* 4、需要设置找线的参数
* 参数一:句柄
* 参数二:边缘检测
* 参数三:设置找线的极性 由暗到明
* 参数四:边缘检测
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition','all')

* 5、设置30个有效的点拟合一条直线
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 30)
* 6、设置最小分数
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)
* 7、对图像进行测量
apply_metrology_model (Image, MetrologyHandle)
* 8、获取卡尺找到的行列坐标,显示卡尺的数量和区域
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)

* 9、生成一个十字,用于显示卡尺找到的点
* 参数一:用于存储生成的交叉轮廓的变量。
* 参数二、三:生成的十字的XY坐标
* 参数四:交叉线的长度
* 参数五:交叉线相对于水平线的夹角(单位弧度)
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)

* 10、显示找到的线
get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)

dev_display (Image)
dev_set_color ('green')
dev_display (Line1)

* 11、获取测量结果
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
* 获取测量的 (起点行列坐标)
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'row_begin', RowBegin)

* 绘制完成,清除句柄
clear_metrology_model (MetrologyHandle)

参考文章:get_metrology_object_result

在这里插入图片描述

4、全阈值分割

* 获取当前活动窗口的句柄(handle)
dev_get_window (WindowHandle)
read_image (Image, 'pellets.png')

* 全局阈值分割,适用于环境稳定,目标与背景存在明显的灰度差的情况
* 参数一、二:输入图像和输出区域
* 参数三、四:阈值上限和下限
threshold (Image, Region, 128, 255)

* connection 连通性
* 参数一:输入区域
* 参数二:输出链接
connection (Region, Connection)

* select_shape 根据形状的特征选择目标区域
* 参数一:输入图像链接或区域
* 参数二:输出的选择后的区域
* 参数三:选择区域的特征,'area'表示区域的面积
* 参数四:多个条件的逻辑关系,'and'表示满足所有条件的区域
* 参数五、六:表示选择面积的最大值和最小值
select_shape (Connection, SelectedRegions, 'area', 'and', 550, 99999)

* erosion_circle 对选定的区域进行圆形腐蚀操作,断开链接区域
* 参数一:输入选定区域
* 参数二:输出腐蚀后的区域
* 参数三:腐蚀半径
erosion_circle (SelectedRegions, RegionErosion, 7.5)

* connection 连通性 核心用途就是拿着腐蚀处理后的对象,生成一个新的对象
connection (RegionErosion, ConnectedRegions2)

* 膨胀:对每个连通域做圆形膨胀操作,还原轮廓大小,目的是为了绘制边缘(半径越大,膨胀越明显)
dilation_circle (ConnectedRegions2, RegionDilation, 7.5)

* 设置绘图参数,'margin' 参数表示设置绘图模式为绘制边缘。
dev_set_draw ('margin')
dev_display (Image)
dev_display (RegionDilation)

* area_center 用于计算给定区域的面积以及重心的位置
area_center (RegionDilation, Area, Row, Column)
* gen_cross_contour_xld 生成一个由两条相互垂直的线段组成的轮廓,形成一个十字形状。
gen_cross_contour_xld (Cross, Row, Column, 15, 0.785398)
* count_obj 计数器:出现一次++  RegionDilation出现一次++,加的值在Number
count_obj (RegionDilation, Number)

* 设置画笔颜色
dev_set_color('green')
* set_display_font 设置显示字体
* 参数一:句柄
* 参数二:字体大小
* 参数三:'mono' 表示选择单色字体
* 参数四:表示字体是否加粗
* 参数五:表示是否设置字体倾斜
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

* 设置画笔放的位置
set_tposition (WindowHandle,10,240)
* 设置画笔的内容
write_string (WindowHandle, '数量:'+Number)

参考文章:select_shape

在这里插入图片描述

5、开运算、闭运算

* read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-17.12-Progress/examples/images/claudia.png')
* 转灰度
* rgb1_to_gray (Image, GrayImage)
* 设置阈值
* threshold (GrayImage, Regions, 32, 113)
* 分割区域:将所关联的像素区域连成一组
* ConnectedRegions会按照面积和中心划分成多个区域
* connection (Regions, ConnectedRegions)
* 选择的区域
* select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20377.7, 83996)
* 特征直方图:纵坐标是数量,横坐标是对应的参数取值范围
* select_shape (ConnectedRegions, SelectedRegions1, 'row', 'and', 250, 296)
* 获取区域面积的区域和中心,如果有多个区域结果将存储在一组数中,数组的顺序与输入区域的顺序对应
* area_center (SelectedRegions1, Area, Row, Column)

* 形态学操作 膨胀
* dilation_circle (SelectedRegions1, RegionDilation, 3.5)
* dilation_rectangle1

* 形态学操作 腐蚀
* erosion_circle (RegionDilation, RegionErosion, 3.5)


********** 开运算(先腐蚀后膨胀)
* read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-17.12-Progress/examples/images/pellets.png')
* 全局阈值分割
* threshold (Image, Regions, 106, 255)
* connection (Regions, ConnectedRegions1)
* select_shape(ConnectedRegions1,SelecteRegions,'area','and',500,9999)

* 腐蚀
* erosion_circle (SelecteRegions, fushi, 7.5)
* connection 分割区域:将所关联的像素区域连成一组
* connection (fushi, ConnectedRegions)

* 膨胀
* dilation_circle (ConnectedRegions, pengzhang, 7.5)
* dev_display (Image)
* dev_display (pengzhang)


********** 闭运算(先膨胀后腐蚀)
* 结构元素半径:边长越大,膨胀或腐蚀越明显
* 增加像素:使用膨胀或闭运算
* 减少像素:使用腐蚀或开运算
read_image (Image, 'pellets')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
dilation_circle (SelectedRegions, pengzhang, 3.5)
connection (pengzhang, ConnectedRegions1)
erosion_circle (ConnectedRegions1, fushi, 3.5)
dev_display (Image)
dev_display(fushi)

在这里插入图片描述

6、局部阈值分割

read_image (Image, 'clip')
* 全自动阈值分割,主要原理是两个波峰图像的自动阈值分割
* max_separability(最大限度的可分型)smooth_histo(直方图平滑)属于分割方法
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
* 均值滤波处理
mean_image (Image, ImageMean, 7, 7)
* 局部阈值分割,背景差异不明显的时候使用。
* dyn_threshold (Image, ImageMean, RegionDynThresh, 5, 'light')

* 均值和标准偏差局部阈值分割,主要是用来区分目标和背景
var_threshold (ImageMean, Region1, 15, 15, 0.2, 2, 'dark')

* 根据直方图确定阈值自动全阈值分割
* 2代表sigma,数值越大代表提取区域越小
auto_threshold (ImageMean, Regions, 2)

* 快速全局阈值分割类似于threshold,速度更快
fast_threshold (ImageMean, Region2, 128, 255, 20)

* 分水岭图像分割,可以分割出分水岭和盆地
watersheds_threshold (ImageMean, Basins, 10)

参考文章:dyn_threshold

在这里插入图片描述

7、形态学调整

* 关闭窗口更新
dev_update_window ('off')
* 清空显示窗口内容
dev_clear_window ()

* 打开新窗口
* 参数一、二:左上角位置坐标
* 参数三、四:窗口的宽度和高度
* 参数五:'black' 表示窗口的背景颜色为黑色
* 参数六:用于存储新打开窗口的标识符或句柄
dev_open_window (0, 0, 730, 520, 'black', WindowID)
read_image (Bond, 'die/die_03.png')
dev_display (Bond)
* 设置显示字体
set_display_font (WindowID, 16, 'mono', 'true', 'false')
* 在窗口中显示消息
disp_continue_message (WindowID, 'black', 'true')
* 停止程序执行
stop ()

* 用于进行图像阈值分割
* 参数一:要进行阈值分割的输入图像
* 参数二:用于存储分割出的区域的变量
* 参数三:低阈值
* 参数四:高阈值
threshold (Bond, Bright, 100, 255)
* 将二值化区域转化成一个带方向的矩形。主要的用途是定位,将来也可以做orc识别
shape_trans (Bright, Die, 'rectangle2')
* 设置字体颜色
dev_set_color ('green')
* 设置绘制线条的宽度
dev_set_line_width(3)
* 设置显示设备的绘制模式
dev_set_draw('margin')
dev_display (Die)
* 确定了处理的区域,和定位,有效的减少了不相关区域的干扰
disp_continue_message (WindowID, 'black', 'true')
stop ()
* 裁剪图像
reduce_domain (Bond, Die, DieGray)
* 对输入图像进行阈值处理
threshold (DieGray, Wries, 0, 50)
* 填充具有给定形状特征的区域中的空,限定条件是面积在1~100的孔进行填充。
fill_up_shape (Wries, WiresFilled, 'area', 1, 100)
dev_display (Bond)
dev_set_draw ('fill')
dev_set_color ('red')
dev_display (WiresFilled)

disp_continue_message (WindowID, 'black', 'true')
stop ()

* 对圆区域进行开运算---减少像素
opening_circle (WiresFilled, Balls, 15)
dev_set_color ('green')
dev_display (Balls)
disp_continue_message (WindowID, 'black', 'true')
stop ()


* 把整个区域断开
* connection (Balls, ConnectedRegions)
* select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 0, 2000)
* count_obj(SelectedRegions, Number)
* area_center(SelectedRegions, Area, Row, Column)
* for i:=1 to |Number| by 1
*     a:=sqrt(Area/3.14)
*     b:=Row[i]+20
*     c:=Column[i]-10
*     dev_set_color ('red')
*     set_tposition (WindowID, b, c)
*     write_string (WindowID, '半径:'+a)
* endfor


* 把整个区域断开
connection (Balls, ConnectedRegions)
* 选择圆的相似度在0.8~1之间
select_shape (ConnectedRegions, SelectedRegions, 'circularity', 'and', 0.9, 1)
* 如果不进行 connection 断开,则是整个区域,没办法使用
* connection (SelectedRegions, ConnectedRegions1)
* 目的是为了显示圆的直径
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
dev_display (Bond)
dev_display (SortedRegions)

* 取出来最小的圆
smallest_circle (SortedRegions, Row, Column, Radius)
* 准备元组取出来Radius
NumBalls:=|Radius|
* 直径
Diameter:=2*Radius
* 最小值
minDiameter := min(Diameter)
* 最大值
maxDiameter := max(Diameter)
* 平均值
meanDiameter := mean(Diameter)

dev_display (Bond)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
for i:=1 to NumBalls by 1
    * 1.输入窗口句柄 2.输入要打印的信息 3.参考的位置 4&&5.打印的位置 6.颜色 7.边框
    disp_message (WindowID, '直径:'+Diameter, 'window', Row, Column, 'black', 'true')
endfor
dev_set_color ('green')
dev_update_window ('on')
disp_continue_message (WindowID, 'black', 'true')
stop ()

在这里插入图片描述

8、blob斑点检测案例

read_image (Image, 'progres')
get_image_size(Image,Width,Height)
dev_open_window(0,0,Width,Height,'black',WindowHandle)
* dev_display 用于显示图像
dev_display(Image)
dev_set_color ('green')
dev_set_draw ('margin')

* 创建Roi
gen_rectangle2 (ROI_0, 308, 212, rad(4.15129), 124, 36)
* 裁剪
reduce_domain (Image, ROI_0, ImageReduced)

threshold (ImageReduced, Region, 0, 160)

* 连同预处理(1>>1.1)
connection (Region, ConnectedRegions)
* 根据面积筛选
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20, 30)

* Ra:主半径  Rb:次半径  Phi:圆的方向    获取区域的等效椭圆参数
elliptic_axis (SelectedRegions, Ra, Rb, Phi)

* 获取区域面积与中心点
area_center (SelectedRegions, Area, Row, Column)

dev_display (Image)
dev_set_color ('red')
dev_display (SelectedRegions)

在这里插入图片描述

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

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

相关文章

嵌入式方向还有希望吗?

我刚开始学习,也不知道我定位的是单片机工程师,嵌入式工程师职位的。 我只知道电子工程师,这个职位其实偏硬件,很多岗位需求是硬件设计,PCB设计,还要懂焊接、各种仪器仪表使用,还有些需要懂单片…

[Redis]——主从同步原理(全量同步、增量同步)

目录 Redis集群: 主从同步原理: replid和offset: 全量同步和增量同步: repl_baklog文件: 主从集群的优化: Redis集群: 部署多台Redis我们称之为Redis集群,他有一个主节点(负责写操作)&…

List(CS61B学习记录)

问题引入 上图中,赋给b海象的weight会改变a海象的weight,但x的赋值又不会改变y的赋值 Bits 要解释上图的问题,我们应该从Java的底层入手 相同的二进制编码,却因为数据类型不同,输出不同的值 变量的声明 基本类型…

【数据结构和算法初阶(C语言)】栈的概念和实现(后进先出---后来者居上的神奇线性结构带来的惊喜体验)

目录 1.栈 1.1栈的概念及结构 2.栈的实现 3.栈结构对数据的处理方式 3.1对栈进行初始化 3.2 从栈顶添加元素 3.3 打印栈元素 3.4移除栈顶元素 3.5获取栈顶元素 3.6获取栈中的有效个数 3.7 判断链表是否为空 3.9 销毁栈空间 4.结语及整个源码 1.栈 1.1栈的概念及结构 栈&am…

电力运维物联网平台

我们构建软硬件结合的生态系统,打造电力设备9物联平台,实现软件、硬件、平台、云数据一体化。 在硬件领域通过自主研发推出了一系列电力领域的硬件设备,包括:智能电力测控终端、智能电力采集终端等产品。在软件领域,我们搭…

韩国大带宽服务器的数据中心位置

很多用户会选择韩国大宽带服务器,那么韩国大带宽服务器的数据中心位置在哪,rak小编为您整理发布韩国大带宽服务器的数据中心位置。 韩国大带宽服务器的数据中心通常位于**首尔及其周边地区**。 韩国因其地理位置的优势,拥有丰富的网络带宽资源…

【智能算法】白鲨算法(AVOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2022年,Braik 等人受到白鲨捕食行为启发,提出了非洲秃鹫优化算法(White Shark Optimizer, WSO)。 2.算法原理 2.1算法思想 海洋中白鲨拥有敏锐的感知、听觉和嗅觉&#xf…

【竞技宝】LOL:sheer对位压制369 JDG鏖战三局力克TES

北京时间2024年3月15日,英雄联盟LPL2024春季常规赛继续进行,昨日共进行三场比赛,第三场比赛由TES对阵JDG。本场比赛前两局双方战至1-1平,决胜局JDG前期就打出完美节奏,中期两次团灭TES后轻松取胜,最终JDG鏖战三局击败TES。以下是本场比赛的详细战报。 第一局: TES:鳄鱼、盲僧、…

九千元家用投影仪怎么样:当贝X5 Ultra万元内天花板配置

投影仪市场正在最贱扩大,越来越的投影品牌纷纷加入市场,一方面可以促成市场的发展,但是宁一方面,市场的乱象也在不断扩大。对于数码新手来说选择一款适合的投影仪变成了一件难事,太多的品牌和产品不知道该如何选择&…

L1-5 猜帽子游戏

宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如果没有…

非常有用的Python 20个单行代码

有用的 Python 单行代码片段,只需一行代码即可解决特定编码问题! 在本文中,云朵君将分享20 个 Python 一行代码,你可以在 30 秒或更短的时间内轻松学习它们。这种单行代码将节省你的时间,并使你的代码看起来更干净且易…

数码管动态扫描显示

摸鱼记录 Day_16 (゚O゚) review 前边已经学习了: 串口接收:Vivado 串口接收优化-CSDN博客 1. 今日摸鱼任务 串口接收数据 并用数码管显示 (゚O゚) 小梅哥视频: 17A 数码管段码显示与动态扫…

06. Redis架构-哨兵

简介 什么是哨兵 Redis的主从模式下,主节点一旦发生故障便不能提供服务,需要人工干预。手动将从节点晋升为主节点,同时还需要修改客户端配置。 Sentinel(哨兵)架构解决了Redis主从人工干预的问题。 Redis Sentinel是…

《鸟哥的Linux私房菜》第6章——总结与习题参考答案

目录 一、 简介 二、一些新了解的指令 1.touch- 修改文件时间或创建新文件 2.umask-新建文件/目录的默认权限 3.文件隐藏属性 4.文件特殊权限 5.file-观察文件类型 三、简答题部分 一、 简介 本章介绍了一些常用的文件与目录指令,包括新建/删除/复制/移动/查…

Spring Cloud Alibaba微服务从入门到进阶(一)(SpringBoot三板斧、SpringBoot Actuator)

Springboot三板斧 1、加依赖 2、写注解 3、写配置 Spring Boot Actuator Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理应用程序的工具和服务。 SpringBoot导航端点 其中localhost:8080/actuator/health是健康检查端点,加上以下配置&#xf…

卖木头块(Lc2312)——动态规划

给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices ,其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每一次操作中,你必须按下述方式之一执行切割操…

在SwiftUI中使用Buider模式创建复杂组件

在SwiftUI中使用Buider模式创建复杂组件 我们在前面的博客闲聊SwiftUI中的自定义组件中聊到了如何在SwiftU中创建自定义组件。 在那里,我们创建了一个非常简单的组件RedBox,它将展示内容增加一个红色的边框。 RedBox非常简单,我们用普通的方…

电梯机房秀

每天乘坐电梯,您见过电梯的机房吗?来,跟着小伍去看看吧。Lets go! 电梯还能节能呢,您知道么?正好,小伍一块带您看看电梯节能装置(●◡●) 目前电梯节能装置已广泛应用于三菱、富士、日立、奥的斯…

电梯机房秀 系列二

上次小伍带大家看了部分机房的照片,并且简单介绍了一下电梯能量回馈装置,小伙伴们表示很新奇,没看够,今天小伍又来了,带大家看一下电梯能量回馈装置到底安装在电梯什么位置。跟着小伍去看看吧。Lets go! 电…

【MySQL基础】MySQL基础操作

文章目录 🍉什么是数据库?🍓MySQL数据库🧀1.数据库操作🍆1.1展示数据库🍆1.2创建数据库🍆1.3使用数据库🍆1.4删除数据库 🧀2.常用数据类型🧀3.数据表操作&…