Halcon 极坐标转换图像

一、概述

先看效果

将圆形的用极坐标转换成矩性然后再进行识别或者其他缺陷检测,最后在还圆到原图中

二、原理:

halcon 圆环类缺陷检测的一种方法(极坐标变换法)_halcon缺口检测-CSDN博客

图像极坐标变换与反变换(Halcon + OpenCV)_将 环形虹膜图像的极坐标转换成矩形图像-CSDN博客

 极坐标转换: 圆形图像--》矩形图像   

原理:

三、实践

案例一

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Beer, '/tem.png')
get_image_size (Beer, Width, Height)
draw_circle (WindowHandle, Row1, Column1, Radius)
gen_circle (Circle, Row1, Column1, Radius)
reduce_domain (Beer, Circle, ImageReduced)
PI:=3.1415926
*WidthPolar := (OuterRadius - 5)*2*3.14
W:=(Radius-150)*2*3.14
H:=300
*逆时针,从0度到360度,转一圈
*                        原始图像     极坐标之后的图像   图像中心坐标row col  起始角度 终止角度  开始半径 结束半径                   差值方式
polar_trans_image_ext (ImageReduced, PolarTransImage,  Row1,  Column1,      0,      2*PI,     0,     Radius*2,   W, H, 'bilinear')dev_display (ImageZoomed)
*长和宽必须是原图像的长和宽,否则尺寸太小的话,图像容易超出,导致一片黑,看不到转换结果
*极坐标图像转笛卡尔坐标系图像  恢复之前的图像
polar_trans_image_inv (PolarTransImage, RestoreImage, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, 'bilinear')
write_image (RestoreImage, 'jpeg 100', 0, 'd:\\2.jpg')*点坐标的转换
*Contour的原坐标是基于极坐标系,我们把它转到笛卡尔坐标系
gen_contour_polygon_xld (Contour, [155.568, 137.404, 30], [47.4712, 116.479, 260])
polar_trans_contour_xld_inv (Contour, XYTransContour, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, Width, Height)

 

 案例二、

dev_update_off ()
get_system ('clip_region', Information)
set_system ('clip_region', 'true')
read_image (Image, 'barcode.png')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
dev_set_colored (12)
dev_display (Image)
stop ()
* 分割包含条形码的CD上的环。
threshold (Image, Region, 0, 100)
closing_circle (Region, Region, 3.5)
connection (Region, ConnectedRegions)
*筛选出圆环
select_shape (ConnectedRegions, Ring, ['width','height'], 'and', [550,550], [750,750])
shape_trans (Ring, OuterCircle, 'outer_circle')
complement (Ring, RegionComplement)
connection (RegionComplement, ConnectedRegions)
select_shape (ConnectedRegions, InnerCircle, ['width','height'], 'and', [450,450], [650,650])
*提取并生成圆环区域外圆,内圆
* 确定包含条形码的环的参数。
smallest_circle (Ring, Row, Column, OuterRadius)
smallest_circle (InnerCircle, InnerRow, InnerColumn, InnerRadius)
dev_set_color ('green')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Image)
dev_display (OuterCircle)
dev_display (InnerCircle)
stop ()
* 现在读条形码。这是通过计算包含条形码的图像中圆环的极坐标变换来实现的。
* WidthPolar := 1440
*内圆的周长
WidthPolar := (OuterRadius - 5)*2*3.14
HeightPolar := round(OuterRadius - InnerRadius - 10)
*极坐标变换(中心Row, Column,用圆环的圆心坐标。起始角度是0到360度。起始半径分别是圆环内圆的半径和外圆的半径。
*宽高分别是圆环外圆的周长和外圆半径减去内圆半径的值)
polar_trans_image_ext (Image, PolarTransImage, Row, Column,0, rad(360), InnerRadius + 5, OuterRadius - 5, WidthPolar, HeightPolar, 'bilinear')
*逆向转换回圆环图像,以查看此函数效果
polar_trans_image_inv (PolarTransImage, XYTransImage, Row, Column, 0, rad(360), InnerRadius + 5, OuterRadius - 5,  Width, Height, 'nearest_neighbor')
invert_image (PolarTransImage, ImageInvert)
* 由于条形码区域相当平坦,因此图像的高度增加了一倍。
zoom_image_factor (ImageInvert, ImageZoomed, 1, 2, 'weighted')
get_image_size (ImageZoomed, Width1, Height1)
dev_resize_window_fit_size (0, 0, Width1, Height1, -1, -1)
dev_display (ImageZoomed)
stop()
create_bar_code_model ([], [], BarCodeHandle)
* 条形比较小,对比度也低;因此,阈值从0.05提高到0.1。
set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)
set_bar_code_param (BarCodeHandle, 'meas_thresh', 0.3)
find_bar_code (ImageZoomed, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)
clear_bar_code_model (BarCodeHandle)
dev_set_window_extents (-1, -1, WidthPolar / 2, HeightPolar)
dev_display (ImageZoomed)
dev_display (SymbolRegions)
set_system ('clip_region', Information)
disp_message (WindowHandle, DecodedDataStrings, 'image', 10, 180, 'black', 'true')
stop ()* 主要是要显示到原来的那个区域
* 将条码区域转换回原始图像并显示。
zoom_region (SymbolRegions, SymbolRegions, 1, 0.5)
polar_trans_region_inv (SymbolRegions, CodeRegionCircular, Row, Column, 0, rad(360), InnerRadius + 5, OuterRadius - 5, WidthPolar, HeightPolar, Width, Height, 'nearest_neighbor')
dev_set_window_extents (-1, -1, Width / 2, Height / 2)
dev_display (Image)
dev_display (CodeRegionCircular)
disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')

 案例三

* 
* tuning parameters
SmoothX := 501
ThresholdOffset := 25
MinDefectSize := 50
* 
* initialization
PolarResolution := 640
RingSize := 70
get_system ('store_empty_region', StoreEmptyRegion)
set_system ('store_empty_region', 'false')
read_image (Image, 'bottles/bottle_mouth_01')
dev_update_off ()
dev_close_window ()
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 640, 512, WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_display (Image)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_open_window_fit_size (0, 648, RingSize, PolarResolution, 150, 512, WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
* 
* Main loop
* 
* Detect defects in bottle necks
for Index := 1 to 16 by 1read_image (Image, 'bottles/bottle_mouth_' + Index$'.02')* * Part 1: 使用blob 分析将外部圆找出来auto_threshold (Image, Regions, 2)select_obj (Regions, DarkRegion, 1)opening_circle (DarkRegion, RegionOpening, 3.5)closing_circle (RegionOpening, RegionClosing, 25.5)fill_up (RegionClosing, RegionFillUp)boundary (RegionFillUp, RegionBorder, 'outer')dilation_circle (RegionBorder, RegionDilation, 3.5)reduce_domain (Image, RegionDilation, ImageReduced)* * 使用边缘亚像素来找轮廓  并拟合圆edges_sub_pix (ImageReduced, Edges, 'canny', 0.5, 20, 40)segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2)union_cocircular_contours_xld (ContoursSplit, UnionContours, 0.9, 0.5, 0.5, 200, 50, 50, 'true', 1)length_xld (UnionContours, Length)select_obj (UnionContours, LongestContour, sort_index(Length)[|Length| - 1] + 1)fit_circle_contour_xld (LongestContour, 'ahuber', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)* * Part 2: 极坐标转换gen_circle (Circle, Row, Column, Radius)dilation_circle (Circle, RegionDilation, 5)erosion_circle (Circle, RegionErosion, RingSize - 5)difference (RegionDilation, RegionErosion, RegionDifference)reduce_domain (Image, RegionDifference, ImageReduced)polar_trans_image_ext (ImageReduced, ImagePolar, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 'nearest_neighbor')* * Part 3:检测是否有缺陷scale_image_max (ImagePolar, ImageScaleMax)mean_image (ImageScaleMax, ImageMean, SmoothX, 3)*原图区域-均值后的区域  =有差异的区域dyn_threshold (ImageScaleMax, ImageMean, Regions1, 55, 'not_equal')connection (Regions1, Connection)select_shape (Connection, SelectedRegions, 'height', 'and', 9, 99999)* ignore noise regionsclosing_rectangle1 (SelectedRegions, RegionClosing1, 10, 20)union1 (RegionClosing1, RegionUnion)* re-transform defect regions for visualizationpolar_trans_region_inv (RegionUnion, XYTransRegion, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 1280, 1024, 'nearest_neighbor')* * Part 4: Display results* display original image with resultsdev_set_window (WindowHandle1)dev_display (Image)dev_set_color ('blue')dev_display (RegionDifference)dev_set_color ('red')dev_display (XYTransRegion)* display polar transformed inspected region with results* The image and resulting region are rotated by 90 degrees* only for visualization purposes! (I.e. to fit better on the screen)* The rotation is NOT necessary for the detection algorithm.dev_set_window (WindowHandle)*旋转图像rotate_image (ImagePolar, ImageRotate, 90, 'constant')dev_display (ImageRotate)count_obj (RegionUnion, Number)if (Number > 0)mirror_region (RegionUnion, RegionMirror, 'diagonal', PolarResolution)mirror_region (RegionMirror, RegionMirror, 'row', PolarResolution)dev_display (RegionMirror)disp_message (WindowHandle1, 'Not OK', 'window', 12, 12, 'red', 'false')elsedisp_message (WindowHandle1, 'OK', 'window', 12, 12, 'forest green', 'false')endifif (Index < 16)disp_continue_message (WindowHandle1, 'black', 'true')stop ()endif
endfor
* Reset system parameters
set_system ('store_empty_region', StoreEmptyRegion)

案例四

https://blog.csdn.net/cashmood/article/details/104709546

ead_image (Image, '1.png') 
rgb3_to_gray (Image, Image, Image, ImageGray) 
dev_open_window_fit_image (ImageGray, 0, 0, -1, -1, WindowHandle) 
dev_set_draw ('margin') 
dev_set_line_width (3) 
dev_set_draw ('margin') 
* dev_set_draw ('fill') 
get_image_size (ImageGray, Width, Height) 
binary_threshold (ImageGray, Region, 'max_separability', 'dark', UsedThreshold) 
connection (Region, ConnectedRegions) 
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70) * 计算最外测圆的直径
smallest_circle (SelectedRegions, Row2, Column2, Radius) 
gen_circle (Circle, Row2, Column2, Radius) 
reduce_domain (ImageGray, Circle, ImageReduced2) 
gray_closing_rect (ImageReduced2, ImageClosing1, 10, 4) 
*极坐标转换  
polar_trans_image_ext (ImageClosing1, PolarTransImage1, Row2, Column2, 0, 6.28319, Radius-100, Radius-10, 6.28*Radius, 90, 'nearest_neighbor') mean_image (PolarTransImage1, ImageMean1, 500, 2) 
dyn_threshold (PolarTransImage1, ImageMean1, RegionDynThresh1, 7, 'dark') 
connection (RegionDynThresh1, ConnectedRegions1) 
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and',100, 9000000) 
union1 (SelectedRegions1, RegionUnion) 
closing_rectangle1 (RegionUnion, RegionClosing1, 10, 20) 
connection (RegionClosing1, ConnectedRegions3) opening_rectangle1 (ConnectedRegions3, RegionOpening1, 10, 20) * 将区域还原到原图上
polar_trans_region_inv (RegionOpening1, XYTransRegion1, Row2, Column2, 0, 6.28319, Radius-100, Radius-10, 6.28*Radius, 90, Width, Height, 'nearest_neighbor') 
smallest_circle (XYTransRegion1, Row, Column, Radius1) 
gen_circle (Circle1, Row, Column, Radius1) 
dev_display (ImageGray) 
dev_display (Circle1)

五、Opencv :

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main() {Mat img = imread("rainbow.png");if (!img.data) {cout << "请检查图像文件名称是否正确" << endl;return -1;}Mat   img1, img2;Point center = Point(img.cols / 2, img.rows / 2); //极坐标在图像中的原点//正极坐标变换->方变圆warpPolar(img, img1, Size(512, 512), center, center.x, WARP_POLAR_LINEAR);//逆极坐标变换->圆变方warpPolar(img1,img2,Size(img.rows,img.cols),center,center.x,WARP_INVERSE_MAP);imshow("Original", img);imshow("Anti Polar Result", img2);imshow("Polar Result", img1);waitKey(0);return 0;
}

图像极坐标变换与反变换(Halcon + OpenCV)_将 环形虹膜图像的极坐标转换成矩形图像-CSDN博客 

//
// Created by zzl on 2020/12/20.
//#include <iostream>
#include "opencv2/opencv.hpp"using namespace std;
using namespace cv;// 矩形图像转圆形
Mat Rectangle_to_Circle(const Mat &src, int Width);Mat Circle_to_Rectangle(const Mat &src);uchar getPixel(const Mat &src, double X, int X_up, int X_down, double Y, int Y_up, int Y_down);int main(int argc, char **argv) {// 读入图像Mat src, dst;src = imread("/home/zzl/Blog/CoordinateTrans/Data/testimage4.jpg", 0);namedWindow("InputImages", WINDOW_NORMAL);imshow("InputImages", src);dst = Rectangle_to_Circle(src, 2 * src.rows);namedWindow("OutputImages", WINDOW_NORMAL);imshow("OutputImages", dst);Mat dst2;dst2 = Circle_to_Rectangle(dst);namedWindow("OutputImages2", WINDOW_FREERATIO);imshow("OutputImages2", dst2);cout << "Hello World" << endl;waitKey();return 0;
}Mat Rectangle_to_Circle(const Mat &src, int Width) {int src_height = src.rows;int src_width = src.cols;Size dstSize = Size(2 * src_height, 2 * src_height);Mat dst = Mat::zeros(dstSize, CV_8UC1);// 极坐标变换double scale_r = 2 * src_height / (dstSize.width);double scale_theta = src_width / CV_2PI;Mat tmp = Mat::zeros(dst.size(), CV_64FC1);for (int i = 0; i < dstSize.height; ++i) {for (int j = 0; j < dstSize.width; ++j) {// 计算距离Point2d center(dstSize.width / 2, dstSize.width / 2);double distance = sqrt(pow(i - center.y, 2) + pow(j - center.x, 2));
//            tmp.at<double>(j, i) = distance;if (distance < dstSize.width / 2) {// 处于边界内部的点,可以提取像素// 坐标变换求对应方图上的点的坐标double Rec_Y = distance * scale_r; //Y 方向坐标if (Rec_Y < 0) {Rec_Y = 0;}if (Rec_Y > dstSize.width / 2) {Rec_Y = dstSize.width / 2;}double line_theta = atan2(i - center.y, j - center.x);if (line_theta < 0) {line_theta += CV_2PI;}if (line_theta < 0) {cout << "仍然小于0" << endl;}double Rec_X = line_theta * scale_theta;dst.at<uchar>(i, j) = src.at<uchar>((int) Rec_Y, (int) Rec_X);}}}// ---- 显示图像边界距离
//    normalize(tmp, tmp, 0, 1, NORM_MINMAX);
//    Mat display;
//    tmp.convertTo(display, CV_8UC1, 255.0);
//
//    namedWindow("Distance", WINDOW_NORMAL);
//    imshow("Distance", display);
//    waitKey();
//    circle(display, Point2d(Width / 2, Width / 2), Width / 2, 0, 10, LINE_8);
//    imshow("Distance", display);
//    waitKey();return dst;
}Mat Circle_to_Rectangle(const Mat &src) {// 变换不同的图像大小有不同的效果Mat dst = Mat::zeros(Size((int) (src.cols * CV_PI) + 1, src.cols / 2 + 1), CV_8UC1);
//    Mat dst = Mat::zeros(Size(src.cols / 2 + 1, src.cols / 2 + 1), CV_8UC1);double scale_r = src.cols / (dst.rows);double scale_theta = 2 * CV_PI / dst.cols;for (int i = 0; i < dst.cols; ++i) {double theta = i * scale_theta;double sinTheta = sin(theta);double cosTheta = cos(theta);for (int j = 0; j < dst.rows; ++j) {double p = j * scale_r;double X = (src.rows / 2 + cosTheta * p);double Y = (src.cols / 2 + sinTheta * p);int X_up = ceil(X);int X_down = floor(X);int Y_up = ceil(Y);int Y_down = floor(Y);if (X > src.cols) {X = src.cols;}if (X < 0) {X = 0;}if (Y > src.rows) {Y = src.rows;}if (Y < 0) {Y = 0;}// 若使用插值算法需要取消注释
//            uchar tmp_Pixel = getPixel(src, X, X_up, X_down, Y, Y_up, Y_down);
//            dst.at<uchar>(j, i) = tmp_Pixel;dst.at<uchar>(j, i) = src.at<uchar>(Y, X); // 最近邻算法}}return dst;
}uchar getPixel(const Mat &src, double X, int X_up, int X_down, double Y, int Y_up, int Y_down) {// 插值算法// X 为水平方向坐标 X_up、X_down分别为向上向下取整后的值 Y同理double inter_val = 0;if (X_up == X_down && Y_up == Y_down) {inter_val = saturate_cast<uchar>(src.at<uchar>(Y_up, X_up));} else if (X_up == X_down) {inter_val = saturate_cast<uchar>((Y_up - Y) * src.at<uchar>(Y_up, X_up) +(Y - Y_down) * src.at<uchar>(Y_down, X_up));} else if (Y_up == Y_down) {inter_val = saturate_cast<uchar>((X_up - X) * src.at<uchar>(Y_up, X_up) +(X - X_down) * src.at<uchar>(Y_up, X_down));} else {double Y_tmp = saturate_cast<uchar>((X_up - X) * src.at<uchar>(Y_down, X_up) +(X - X_down) * src.at<uchar>(Y_down, X_down));double X_tmp = saturate_cast<uchar>((X_up - X) * src.at<uchar>(Y_up, X_up) +(X - X_down) * src.at<uchar>(Y_up, X_down));inter_val = (Y_up - Y) * X_tmp + (Y - Y_down) * Y_tmp;}return (uchar) inter_val;
}

 

 

 

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

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

相关文章

吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.4-3.5

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第三周&#xff1a; 超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架&#xff08;Hyperparameter …

Spark SQL【Java API】

前言 之前对 Spark SQL 的影响一直停留在 DSL 语法上面&#xff0c;感觉可以用 SQL 表达的&#xff0c;没有必要用 Java/Scala 去写&#xff0c;但是面试一段时间后&#xff0c;发现不少公司还是在用 SparkSQL 的&#xff0c;京东也在使用 Spark On Hive 而不是我以为的 Hive O…

ubuntu20.04 开机自动挂载外加硬盘

文章目录 一、问题描述二、操作1. 查找新添盘符2. 格式化硬盘文件系统3. 挂载硬盘4. 开机自动挂载5. 取消挂载6. 查看挂载的硬盘信息 一、问题描述 因电脑使用一段时间后自身硬盘不足&#xff0c;需外加硬盘使得电脑自动识别加载。 二、操作 1. 查找新添盘符 sudo blkid自己…

免费、开源、好用的 SQL 客户端合集

免费、开源、好用的 SQL 客户端合集 分类 编程技术 0、SQL Chat SQL Chat 是 2023 年 3 月推出的新型 SQL 客户端&#xff0c;它将数据库管理带入了基于聊天的新时代。 SQL Chat 由 ChatGPT 驱动&#xff0c;能够帮你编写和润色 SQL 语句&#xff0c;让数据库操作变得更加智…

微信小程序开发环境的搭建

一、注册微信小程序账号 二、安装微信开发者工具 1.下载微信开发者工具。 官网下载地址&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/downloads.html 2、选择稳定版Window64下载安装 3、下载完毕后&#xff0c;点击下一步安装 三、使用微信开发者工具…

深入理解python列表遍历:两种方法详解与实例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、使用索引遍历列表 三、直接使用元素遍历列表 四、总结 一、引言 在编程过程…

创建python字典的两种方法:直观与函数式

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、直观创建法&#xff1a;直接定义键值对 二、函数式创建法&#xff1a;使用内置函数dict…

CSRF 攻击

概述 CSRF(Cross-site request forgery,跨站请求伪造)。 它是指攻击者利用了用户的身份信息&#xff0c;执行了用户非本意的操作。 它首先引导用户访问一个危险网站&#xff0c;当用户访问网站后&#xff0c;网站会发送请求到被攻击的站点&#xff0c;这次请求会携带用户的c…

拼多多携手中国农业大学,投建陕西佛坪山茱萸科技小院

5月16日下午&#xff0c;中国农业大学陕西佛坪山茱萸科技小院在佛坪县银厂沟村揭牌。佛坪县素有“中国山茱萸之乡”的美誉&#xff0c;是全国山茱萸三大基地之一&#xff0c;当地山茱萸是国家地理标志产品&#xff0c;山茱萸肉产量位居全国第二。 为充分发挥佛坪县得天独厚的山…

局部放电试验变频电源

局部放电试验中的变频电源设备 局部放电试验变频电源是一种专为电力设备的局部放电检测设计的高性能电源系统。在电力设备的运行和维护过程中&#xff0c;局部放电测试用于探测潜在的绝缘缺陷&#xff0c;防止它们进一步恶化导致设备损坏。传统的局部放电试验通常使用交流电源&…

jmeter之测试计划

一、测试计划作用 测试计划是jmeter的默认控件所有线程组都是测试计划的下级控件测试计划可以配置用户自定义的变量测试计划可以配置线程组的串行或并行 二、查看界面 名称&#xff1a;可以修改自定义的名称注释&#xff1a;解释测试计划是用来做什么的用户自定义的变量&…

Sentinel重要的前置知识

文章目录 1、雪崩问题及解决方案1.1、雪崩问题1.2、超时处理1.3、仓壁模式1.4、断路器1.5、限流1.6、总结 2、服务保护技术对比3、Sentinel介绍和安装3.1、初识Sentinel3.2、安装Sentinel 4、微服务整合Sentinel ​&#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在…

PX4使用yolo仿真环境搭建

文章目录 前言一、修改机架sdf文件二、安装yolo三、运行 前言 ubuntu20.04 PX4 1.13.3 已配置好PX4 ROS gazebo环境 一、修改机架sdf文件 将双目相机加到仿真的iris机架上 修改下图文件 添加如下&#xff1a; <include><uri>model://stereo_camera</uri>…

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码 FunCaptcha 以其复杂的图像验证而闻名&#xff0c;对自动化系统构成了巨大的挑战。CapSolver 的 API 服务利用先进的 AI 技术轻松应对和解决 FunCaptcha 挑战。本指南探讨了 CapSolver 如何实现无缝自动化&#xff…

STM32笔记-AD模数转换

目录 一、ADC介绍 二、ADC主要特征 三、ADC框图 1. ​​​​ 外部触发转换 ​ 2. 转换模式 3. 输入通道 4. 逻辑框图 四、校准 五、数据对齐 六、AD转换步骤 七、AD_Init(单通道AD转换)初始化函数配置 DMA: adc_dma_mode_enable(ADC0); 这段代码是用来使能ADC的DMA&a…

ts 字符串不能做索引异常提示 type because expression of type ‘string‘

Element implicitly has an any type because expression of type string cant be used to index type 例子 let a{b:"1",c:"1" } var b"b"; let ca[b] let ca[b]就会爆这个错误&#xff0c;因为在编译器看来b是一个未知的东西&#xff0c;它不…

什么是创造力?如何判断自己的创造力?

创造力&#xff0c;主要表现为创新思想、发现和创造新事物的能力&#xff0c;是知识&#xff0c;智力和能力的综合能力&#xff0c;尤其是在职业发展方面&#xff0c;创造力具有重要的意义&#xff0c;企业的核心竞争力就来源于创造力&#xff0c;这就需要具有创造力的员工来推…

【QGIS入门实战精品教程】13.1:导入带地理标签的航测照片

文章目录 一、数据准备二、导入带地理标签的航测照片三、导出点位shp四、生成航线一、数据准备 本实验数据位于13.1:导入带地理标签的航测照片.rar中,如下: 查看照片及相机参数信息,航测照片都带有相机参数、部分POS及地理坐标信息,如下所示: 二、导入带地理标签的航测照…

YoloV8改进策略:蒸馏改进|CWDLoss|使用蒸馏模型实现YoloV8无损涨点|特征蒸馏

摘要 在本文中&#xff0c;我们成功应用蒸馏策略以实现YoloV8小模型的无损性能提升。我们采用了CWDLoss作为蒸馏方法的核心&#xff0c;通过对比在线和离线两种蒸馏方式&#xff0c;我们发现离线蒸馏在效果上更为出色。因此&#xff0c;为了方便广大读者和研究者应用&#xff…

大语言模型PEFT

目录 一、PEFT的关键概念和方法 部分参数微调 概念 方法 优势 适配器&#xff08;Adapters&#xff09; 方法 优势 低秩分解&#xff08;Low-rank Factorization&#xff09; 方法 优势 差分微调&#xff08;Delta Tuning&#xff09; 方法 优势 多任务学习&…