halcon对图片进行处理基础

news2024/11/25 12:38:01

实例图片

C:\Users\Public\Documents\MVTec\HALCON-19.11-Progress\examples\images

在这里插入图片描述
在这里插入图片描述

*读取图片
read_image (Image1, 'D:/c++/image/1.png')
*读取大小
get_image_size(Image1,Width, Height)
*创建窗口
dev_close_window()
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image1)
*获得图像的时间
get_image_time(Image1, MSecond, Second, Minute, Hour, Day, YDay, Month, Year)
*获取类型
get_image_type(Image1, Type)
*指针,内存地址
get_image_pointer1(Image1, Pointer, Type1, Width1, Height1)

read_image(Image,'D:/c++/image/2.jpg')
*图片分成rgb
decompose3(Image, Image11, Image2, Image3)
*rgb在进行合并
compose3(Image11, Image2, Image3, MultiChannelImage)
*rgb变成灰通道
rgb1_to_gray(MultiChannelImage, GrayImage)
*rgb转换成hsv颜色空间,使用色调,饱和度,亮度,表示
trans_from_rgb(Image11, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')

对图像进行抠图,轮廓,和亚像素

*读取图片
read_image(Image, 'fabrik')

*读取图像大小
get_image_size(Image, Width, Height)
*使用窗口
dev_clear_window()
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*对图像进行,阈值判断,全局阈值
threshold(Image, Region, 128, 255)

*对图像进行打散标注
connection(Region, ConnectedRegions)
*使用面积进行过滤,rectangularity:使用矩形过滤
select_shape(ConnectedRegions, SelectedRegions, 'rectangularity', 'and', 0.9, 1)
*在使用一次进行过滤
select_shape(SelectedRegions, SelectedRegions1, 'area', 'and',7500, 99999)
*进行填充
fill_up(SelectedRegions1, RegionFillUp)
*进行抠图,减少范围,roi
reduce_domain(Image, RegionFillUp, ImageReduced)

*找到对应的阈值
threshold(ImageReduced, Region1, 0, 100)

*得到亚像素轮廓,
threshold_sub_pix(ImageReduced, Border, 158)

*在轮廓中,使用的是轮廓的长度,进行过滤筛选
select_contours_xld(Border, SelectedContours, 'contour_length', 90, 120, -0.5, 0.5)

*适合的区域有多少个
count_obj(SelectedContours, Number)
*对轮廓进行填充
gen_region_contour_xld(SelectedContours, Region2, 'filled')
*可以在进行抠图
reduce_domain(ImageReduced, Region2, ImageReduced1)

在这里插入图片描述

形态学,腐蚀,膨胀

*区域集合运算及变换


*读取图片
read_image(Image, 'D:/c++/image/5')
*图片大小
get_image_size(Image, Width, Height)

dev_close_window()
*开窗口
dev_open_window(0, 0, Width/2, Height/2, 'black', WindowHandle)
*图像显示
dev_display(Image)

*转换成灰色图片
rgb1_to_gray(Image, GrayImage)

*设置字体
set_display_font ( WindowHandle, 14, 'mono', 'true', 'false')
*显示字体右下角
disp_continue_message ( WindowHandle, 'black', 'true')

Grag := 80
*直方图全阈值分割
threshold(GrayImage, Region, Grag, 255)

*自动阈值,dark:黑色的部分找出来,light:白色部分
binary_threshold(GrayImage, Region1, 'max_separability', 'light', UsedThreshold)

*均值滤波,教程写的是亮度像素值乘2+1
mean_image(GrayImage, ImageMean, 20, 20)

*原图与滤波后的图进行比较,明暗差别大于5的进行选中,动态阈值
dyn_threshold(GrayImage, ImageMean, RegionDynThresh, 8, 'light')
*查看多少个
count_obj(RegionDynThresh, Number)
*进行打散
connection(RegionDynThresh, ConnectedRegions)
*查看多少个678count_obj(ConnectedRegions, Number1)
*进行面积的阈值处理
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
select_shape(SelectedRegions, SelectedRegions1, 'area', 'and', 900,1200)
*用大的分割图减去小的分割图
difference(SelectedRegions, SelectedRegions1, RegionDifference)
*进行填充
fill_up(RegionDifference, RegionFillUp)
*用矩形相似度
select_shape(RegionFillUp, SelectedRegions2, 'rectangularity', 'and', 0.9, 1)
*使用外接圆
select_shape(SelectedRegions2, SelectedRegions3, 'outer_radius', 'and', 90, 120)
*中心点使用画出外接圆,内接圆,矩形,等
shape_trans(SelectedRegions3, RegionTrans, 'inner_circle')

*可以进行画
draw_region(Region2, WindowHandle)

*凸性,不规则图像,用最高点进行了连接
shape_trans(Region2, RegionTrans1, 'convex')
*用凸性给出的区间画出的,
difference(RegionTrans1, Region2, RegionDifference1)
*图像显示
dev_display(SelectedRegions)
*骨架,再中间
skeleton(SelectedRegions, Skeleton)

dev_display(Region2)

*先膨胀后收缩可以填坑,闭运算
*膨胀
dilation_circle(Region2, RegionDilation, 3.5)
*收缩
erosion_circle(RegionDilation, RegionErosion, 3.5)
*用膨胀减去收缩的可以得到边缘
difference(RegionDilation, RegionErosion, RegionDifference2)

*获取边缘
boundary(RegionDifference2, RegionBorder, 'inner')

在这里插入图片描述

画出圆,矩形,计算出距离

read_image(Image, 'D:/c++/image/5')

*读取图像大小
get_image_size(Image, Width, Height)
*使用窗口
dev_clear_window()
dev_open_window(0, 0, Width/2, Height/2, 'black', WindowHandle)
dev_display(Image)
*创建一个圆型的roi
draw_circle(WindowHandle, Row, Column, Radius)

*生产区域的圆
gen_circle(Circle, Row, Column, Radius)

*创建一个椭圆
draw_ellipse(WindowHandle, Row1, Column1, Phi, Radius1, Radius2)

*生成椭圆
gen_ellipse(Ellipse, Row1, Column1, Phi, Radius1, Radius2)

*生成一个外接圆
smallest_circle(Ellipse, Row2, Column2, Radius3)

*显示出来
gen_circle(Circle1, Row2, Column2, Radius3)


*创建一个矩形
draw_rectangle1(WindowHandle, Row11, Column11, Row21, Column21)
*显示矩形
gen_rectangle1(Rectangle, Row11, Column11, Row21, Column21)


*创建一个带方向的矩形

draw_rectangle2(WindowHandle, Row3, Column3, Phi1, Length1, Length2)
*显示出来
gen_rectangle2(Rectangle1, Row3, Column3, Phi1, Length1, Length2)

*创建用点来创建
draw_region(Region, WindowHandle)


*创建一个直线
draw_line(WindowHandle, Row12, Column12, Row22, Column22)
*显示直线
gen_region_line(RegionLines, Row12, Column12, Row22, Column22)


draw_point(WindowHandle, Row4, Column4)
gen_region_points(Region1, Row4, Column4)



dev_display(Image)


*创建一个矩形
draw_rectangle1(WindowHandle, Row11, Column11, Row21, Column21)
*显示矩形
gen_rectangle1(Rectangle, Row11, Column11, Row21, Column21)
*保存区域

write_region(Rectangle, 'D:/c++/image/region.hobj')

dev_display(Image)
*读取感兴趣区域
read_region(RegionROI,'D:/c++/image/region.hobj' )

*照片与感兴趣区域直接就给截取出来,但是不是从0开始的
reduce_domain(Image, RegionROI, ImageReduced)



*生成一个空区域
gen_empty_region(RegionROI)
gen_empty_obj(EmptyObject)                                                                                                                                                                                                                                                             

*让一个矩形添加进去
concat_obj(RegionROI, Rectangle, RegionROI)
*让一个圆写进去
concat_obj(RegionROI, Circle, RegionROI)



*创建一个点
dev_display(Image)
draw_point(WindowHandle, Row5, Column5)
gen_cross_contour_xld(Cross, Row5, Column5, 60, 0)


*创建一个点
draw_point(WindowHandle, Row6, Column6)
gen_cross_contour_xld(Cross1, Row6, Column6, 60, 0)

*计算两个点的距离

distance_pp(Row5, Column5, Row6, Column6, Distance)


*现在中如果是10厘米
readDis := 10
*用现实中的距离除于像素中的,就可以得到比值
mmpp := readDis/Distance1 


*创建一个线

draw_line(WindowHandle, Row13, Column13, Row23, Column23)

*显示出来
gen_region_line(RegionLines1, Row13, Column13, Row23, Column23)
*点到直线的距离
distance_pl(Row5, Column5, Row13, Column13, Row23, Column23, Distance1)


* 得到的比值在乘线到点的距离
read := mmpp *Distance1


*点到区域的距离,后面是最长的距离和最短的距离

distance_pr(RegionLines1, Row6, Column6, DistanceMin, DistanceMax)



*创建用鼠标画出不规则图像
draw_region(Region2, WindowHandle)

*用这个不规则图形,能测量出与直线最近距离和最远距离
distance_lr(Region2, Row13, Column13, Row23, Column23, DistanceMin1, DistanceMax1)

*区域带区域之间的最短距离的点是多少
distance_rr_min(Region2, RegionLines1, MinDistance, Row14, Column14, Row24, Column24)

*显示出来
gen_region_line(RegionLines2, Row14, Column14, Row24, Column24)

*最短的点用坐标点显示出来
gen_cross_contour_xld(Cross2, Row14, Column14, 60, 0.48)
gen_cross_contour_xld(Cross3, Row24, Column24, 60,0.48 )

在这里插入图片描述

对区域进行移动

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
dev_set_draw ('margin')
dev_clear_window ()
* Draw with the mouse an arbitrary region into the window
draw_region (Region, WindowID)
area_center (Region, Area, Row1, Column1)
Button := 1
while (Button == 1)
    * Click to the position where the region should be placed
    * Use right mouse button to exit the loop
    get_mbutton (WindowID, Row, Column, Button)
    move_region (Region, RegionMoved, Row - Row1, Column - Column1)
endwhile

可以早到矩形的各个边

read_image(Image, '1')
get_image_size(Image, Width, Height)

dev_close_window()
dev_open_window(0, 0, Width/4, Height/4, 'black', WindowHandle)

dev_display(Image)

*均值滤波
mean_image(Image, ImageMean, 50, 50)
dyn_threshold(Image, ImageMean, RegionDynThresh, 10, 'light')

connection(RegionDynThresh, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 45000, 99999)


*使用矩形进行填充,进行筛选

fill_up(SelectedRegions, RegionFillUp)

select_shape(RegionFillUp, SelectedRegions1, 'rectangularity', 'and', 0.8, 1)

*闭运算
closing_circle(SelectedRegions1, RegionClosing, 43.5)
*开运算
opening_circle(RegionClosing, RegionOpening, 43.5)

*选择边
boundary(RegionOpening, RegionBorder, 'inner')


*整体矩形往上面挪动

move_region(RegionOpening, RegionMoved, -15  , 1)

*将矩形进行缩小
erosion_circle(RegionMoved, RegionErosion, 13.5)

*相交的画出,得到一个直线

intersection(RegionBorder, RegionErosion, RegionIntersection)

在这里插入图片描述
在这里插入图片描述

物体放大

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
* Draw with the mouse an arbitrary (small) region into the window
draw_region (Region, WindowID)
*缩放宽高都放大2zoom_region (Region, RegionZoom, 2, 2)
dev_clear_window ()
dev_set_draw ('margin')
dev_set_color ('red')
dev_display (Region)
dev_set_color ('green')
dev_display (RegionZoom)

生成中心线,在进行镜像

*找出中心线
gen_region_line(RegionLines,Height/2,0,Height/2,Width)
*如果使用中心线进行镜像,就是(Height/2)*2
mirror_region(要进镜像的参数,输出的参数,"row",(Height/2)*2)

在这里插入图片描述

转置

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
* Draw with the mouse an arbitrary region into the window
draw_region (Region, WindowID)
transpose_region (Region, Transposed, 256, 256)
dev_clear_window ()
dev_set_draw ('margin')
dev_set_color ('red')
dev_display (Region)
dev_set_color ('green')
dev_display (Transposed)

在这里插入图片描述

一维码

open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0]  Camera MV-UB500#CC5CCDD3-4', 0, -1, AcqHandle)
*创建句柄
create_bar_code_model([], [], BarCodeHandle)

dev_close_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('green')
dev_set_draw('margin')
dev_set_line_width(3)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
*后面数字是识别多少个
set_bar_code_param(BarCodeHandle, 'element_size_min', 2 )

while (true)
    grab_image (Image, AcqHandle)
    rgb1_to_gray(Image, GrayImage)
    * Image Acquisition 01: Do something
    *直方图阈值
    threshold(GrayImage, Region2, 100, 255)
    *全局阈值
    binary_threshold(Image, Region1, 'max_separability', 'light', UsedThreshold1)
    connection(Region1, ConnectedRegions2)
    *选着给定形状的区域,计算区域中的最小外接平面矩形                                                                                                                                                                                                                                                                                                                                                         
    select_shape_std(ConnectedRegions2, SelectedRegions2, 'max_area', 70)
    *变换区域形状
    shape_trans(SelectedRegions2, RegionTrans1, 'convex')
    *通过reduce_domain确实能获得特定区域Region位置的图像,直接进行抠图
    reduce_domain(Image, RegionTrans1, ImageReduced1)
    *通过均值平滑图像
    mean_image(ImageReduced1, ImageMean1, 9, 9)
    *阈值分割
    dyn_threshold(ImageReduced1, ImageMean1, RegionDynThresh1, 1, 'dark')
    
    connection(RegionDynThresh1, ConnectedRegions3)
    
    *筛选
    select_shape(ConnectedRegions3, SelectedRegions3, 'area', 'and', 3000, 4800)
    
    select_shape(SelectedRegions3, SelectedRegions6, 'width', 'and', 200, 99999)
    
    
    
    fill_up(SelectedRegions6, RegionFillUp3)
    
    *筛选出矩形,算子满足特征区域,'rectangle1':计算区域的最小外接平行矩形,
    select_shape_std(RegionFillUp3, SelectedRegions9, 'rectangle1', 60)
    
    dilation_circle(SelectedRegions9, RegionDilation1, 40.5)
    
    *进行抠图
    reduce_domain(Image, SelectedRegions9, ImageReduced3)
    
    
    *dyn_threshold(ImageReduced3, ImageReduced3, RegionDynThresh2, 1, 'dark')
    
    
    
    find_bar_code(ImageReduced3, SymbolRegions1, BarCodeHandle, 'auto', DecodedDataStrings1)
    
    get_bar_code_result(BarCodeHandle, 'all', 'decoded_types', BarCodeResults1)
    disp_message(WindowHandle, DecodedDataStrings1, 'window', 12, 12, 'black', 'true')
    
endwhile
clear_bar_code_model(BarCodeHandle) 
close_framegrabber (AcqHandle)

    
    
 
    
    
    
    
    
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0]  Camera MV-UB500#CC5CCDD3-4', 0, -1, AcqHandle)
*创建句柄
create_bar_code_model([], [], BarCodeHandle)

dev_close_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('green')
dev_set_draw('margin')
dev_set_line_width(3)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
*后面数字是识别多少个
set_bar_code_param(BarCodeHandle, 'element_size_min', 2 )

while (true)
    grab_image (Image, AcqHandle)
    
    
    
    *进行识别
    find_bar_code(Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
    get_bar_code_result(BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
    disp_message(WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')
endwhile
clear_bar_code_model(BarCodeHandle) 
close_framegrabber (AcqHandle)

在这里插入图片描述

一维码设置的参数

set_bar_code_param (BarCodeHandle, ‘contrast_min’, ‘True’)*设置后面的true和false进行不同解码,true进行全局解码,速度慢但是准确,false识别前几个进行解码,会有错误

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

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

相关文章

D. Cyclic Operations Codeforces Round 897 (Div. 2)

Problem - D - Codeforces 题目大意&#xff1a;有一个长度为n的数组a&#xff0c;每次操作可以选取一个长度为k的所有数互不相同的数组b&#xff0c;令a[bi]b[i%k1]&#xff0c;问能否将一个全为零的数组通过任意次操作得到a 1<k<n<1e5 思路&#xff1a;通过上述操…

如何用Jmeter编写脚本压测

随着商业业务不断扩张&#xff0c;调用adsearch服务频率越来越高&#xff0c;所以这次想做个压测&#xff0c;了解目前多少并发量可以到达adsearch服务的界值。 这次选用的jmeter压测工具&#xff0c;压测思路如图&#xff1a; 同时&#xff0c;我也准备了一份软件测试面试视频…

Windows C++ VS2022 OpenVINO 物体检测 Demo

准备工作&#xff1a; 1、下载opencv 地址&#xff1a;Releases - OpenCV 我下载的是opencv-4.5.5&#xff0c;存放的路径为&#xff1a; 2、下载OpenVino 地址&#xff1a;https://storage.openvinotoolkit.org/repositories/openvino/packages/2023.0.1/ 我存放的路径为…

蓝牙运动耳机哪款好用、最好用的运动耳机推荐

运动耳机现如今可谓是备受热捧的运动潮流单品&#xff0c;消费者对于耳机的需求实际上非常多元化。一款出色的运动耳机不仅要满足基本的运动需求&#xff0c;还需要具备丰富的使用功能&#xff0c;这直接决定了耳机的附加价值。接下来&#xff0c;我将向大家推荐5款佩戴舒适、牢…

HarmonyOS应用开发—资源分类与访问

应用开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些资源在不同的设备或配置中的表…

idea装载jerbel以及文件上传下载

一、JRebel 1.1 Jrebel介绍 JRebel是一个Java开发工具&#xff0c;它是一款用于实时代码重载的插件。它的主要功能是在不重新启动应用程序的情况下&#xff0c;将修改后的Java代码实时应用到正在运行的应用程序中&#xff0c;从而加快开发周期&#xff0c;提高开发效率。 实…

算法通关村第十九关:青铜-动态规划是怎么回事

青铜挑战-动态规划是怎么回事 动态规划&#xff08;简称DP&#xff0c;Dynamic Programming&#xff09;&#xff1a;最热门、最重要的算法之一。面试中大量出现&#xff0c;整体偏难。 1. 热身&#xff1a;重复计算和记忆化搜索&#xff08;如何说一万次"我爱你"&…

Windows驱动开发(一)

1. 引言 很难为术语 “驱动程序”提供一个精确的定义。 就最基本的意义而言&#xff0c;驱动程序是一个软件组件&#xff0c;可让操作系统和设备彼此通信。 例如&#xff0c;假设应用程序需要从设备中读取某些数据。 应用程序会调用由操作系统实现的函数&#xff0c;操作系统…

WPF——Control与Template理解

文章目录 一、前言二、控件三、模板3.1 DataTemplate3.2 ControlTemplate3.3 ContentPresenter 四、结语 一、前言 最近又翻看了下刘铁猛的《深入浅出WPF》&#xff0c;发现对模板章节中的部分内容有了更深的体会&#xff0c;所以写篇文扯扯。 文章标题是Control与Template&a…

画流程图用什么软件好?安利这几款

画流程图用什么软件好&#xff1f;画流程图是一项非常重要的技能&#xff0c;它可以帮助我们更好地规划和管理工作流程&#xff0c;提高工作效率。在现代的企业中&#xff0c;流程图已经成为了不可或缺的一部分&#xff0c;它可以用来描述各种业务流程、流程控制、组织结构等等…

数据治理实战步骤

写在前面:数据治理是数字化转型的基础,是数字要素流通的首要任务。但是面对不同的情况,数据治理的手段不同。 数据治理专员要转换思想,数据治理中单靠技术、软件是不行的,比如一些单位认为数据治理平台是万能的,直接上平台一般是做不好的,需基于企业的组织文化、愿景等对…

vue全局使用sass变量

需求&#xff1a;框架需要使用scss&#xff0c;之后不想把很多重复的css一个一个写&#xff0c;就提取出来咯&#xff0c;到时候只需要更改scss文件就可以了&#xff0c;不用一个一个的找 1.下载sass 这我下的俩个版本&#xff0c;如果你们下载最新版不兼容可以参考我的版本下…

高效办公利器:批量重命名与翻译文件名一步到位

在我们的日常工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;包括图片、文档、视频等各种类型。有时候&#xff0c;我们需要对文件进行重命名或者翻译&#xff0c;以便于我们更方便地管理和使用这些文件。但是&#xff0c;如果一个一个手动操作&#xff0c;将是非常…

《树莓派4B家庭服务器搭建指南》第二十一期:安装开源远程桌面服务rustdesk, 内网丝滑,外网流畅控制

title: 《树莓派4B家庭服务器搭建指南》第二十一期&#xff1a;安装开源远程桌面服务rustdesk, 内网丝滑,外网流畅控制Windows,macOS,Linux设备 tags: 个人成长 categories:树莓派不吃灰 前段时间, 有一台老式MacBook Pro被我改造成了影视资源解码主机, 《树莓派4B家庭服务器搭…

老师怎样发布查询

作为一名老师&#xff0c;我们经常需要向家长发布各种查询&#xff0c;比如成绩查询、作业查询等。以往&#xff0c;我们可能会将查询结果整理成Excel表格&#xff0c;然后通过各种渠道发送给家长&#xff0c;这样既繁琐又不够高效。幸好&#xff0c;现在有了易查分&#xff0c…

MybatisPlus(4)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在之前我们讲解了大部分查询相关的操作&#xff0c;接下来进行增删改的学…

SpringBoot项目--电脑商城【增加/减少购物车商品数量】

1.持久层[Mapper] 1.1规划需要执行的SQL语句 1.更新该商品的数量.此SQL语句无需重复开发 update t_cart set num?,modified_user?,modified_time? where cid? 2.首先进行查询需要操作的购物车数据信息【查看该条数据是否存在】 SELECT * FROM t_cart WHERE cid?2.接口…

如何解决实时语音通讯技术的延迟问题?

实时语音通讯技术的延迟问题一直是人们关注的焦点。在实时通讯中&#xff0c;延迟会影响到通话的质量和用户体验&#xff0c;因此如何解决实时语音通讯技术的延迟问题是一个重要的挑战。本文将探讨如何解决实时语音通讯技术的延迟问题。 一、延迟的定义和分类 延迟是指从说话…

C语言和汇编到底谁更厉害呢?

今日话题&#xff0c;C语言和汇编到底谁更厉害呢&#xff1f; 有位毕业生与我分享了他的经历。在学校&#xff0c;他学习了汇编和C语言。毕业后&#xff0c;他加入了一家嵌入式企业&#xff0c;发现C语言因其可移植性、开发效率和可读性而更为通用和适用。事实证明&#xff0c;…

排序算法-----冒泡排序与选择排序

目录 前言: 冒泡排序 原理图 代码实现 分析总结 选择排序 原理图 代码实现 分析总结 前言: 今天我们就开始学习排序算法&#xff0c;排序算法也是数据结构与算法在重要组成部分之一&#xff0c;排序算法是最经典的算法知识。因为其实现代码短&#xff0c;应该广&#x…