第 12 章 基于块匹配的全景图像拼接--Matlab深度学习实战图像处理应用

2023-05-16

在这里插入图片描述
第 12 章 基于块匹配的全景图像拼接–Matlab深度学习实战图像处理应用GUI实现
效果如图所示
在这里插入图片描述
在这里插入图片描述
完整案例

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

主函数文件
Gui_Main.m文件

function varargout = Gui_Main(varargin)
% GUI_MAIN MATLAB code for Gui_Main.fig
%      GUI_MAIN, by itself, creates a new GUI_MAIN or raises the existing
%      singleton*.
%
%      H = GUI_MAIN returns the handle to a new GUI_MAIN or the handle to
%      the existing singleton*.
%
%      GUI_MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI_MAIN.M with the given input arguments.
%
%      GUI_MAIN('Property','Value',...) creates a new GUI_MAIN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Gui_Main_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Gui_Main_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Gui_Main

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @Gui_Main_OpeningFcn, ...
    'gui_OutputFcn',  @Gui_Main_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Gui_Main is made visible.
function Gui_Main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Gui_Main (see VARARGIN)

% Choose default command line output for Gui_Main
clc; warning off all;
axes(handles.axes1); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes2); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes4); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);

handles.output = hObject;
handles.file = [];
handles.MStitch = [];
handles.grayResult = [];
handles.RGBResult = [];
handles.grayListResult = [];
handles.RGBListResult = [];

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Gui_Main wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Gui_Main_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --------------------------------------------------------------------
function uipushtool1_ClickedCallback(hObject, eventdata, handles)
% hObject    handle to uipushtool1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename, pathname] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
    '*.*','All Files' }, '保存结果', ...
    'Result\result_gui.jpg');
if isempty(filename)
    return;
end
file = fullfile(pathname, filename);
f = getframe(gcf);
f = frame2im(f);
imwrite(f, file);
msgbox('保存GUI结果图像成功!', '提示信息', 'modal');


% --------------------------------------------------------------------
function uipushtool2_ClickedCallback(hObject, eventdata, handles)
% hObject    handle to uipushtool2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

axes(handles.axes1); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes2); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes4); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);

handles.file = [];
handles.MStitch = [];
handles.grayResult = [];
handles.RGBResult = [];
handles.grayListResult = [];
handles.RGBListResult = [];

[filename, pathname, filterindex] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
    '*.*','All Files' }, '选择待处理图像', ...
    '.\\images\\', 'MultiSelect', 'on');
if ~isa(filename, 'cell') && isequal(filename, 0)
    return;
end

file = File_Process(filename, pathname);
if length(file) < 2
    msgbox('请选择至少两幅图像!', '提示信息', 'modal');
    return;
end
Img1 = imread(file{1});
Img2 = ImageList(file);
axes(handles.axes1);
imshow(Img1); title('图像序列1', 'FontWeight', 'Bold');
axes(handles.axes2);
imshow(Img2); title('图像序列2', 'FontWeight', 'Bold');

handles.Img1 = Img1;
handles.Img2 = Img2;
handles.file = file;
guidata(hObject, handles);


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
axes(handles.axes1); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes2); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
axes(handles.axes4); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);

handles.file = [];
handles.MStitch = [];
handles.grayResult = [];
handles.RGBResult = [];

dname = uigetdir('.\\images\\风景图像', '请选择待处理图像文件夹:');
if dname == 0
    return;
end
df = ls(dname);
if length(df) > 2
    for i = 1 : size(df, 1)
        if strfind(df(i, :), '.db');
            df(i, :) = [];
            break;
        end
    end
    if length(df) > 2
        filename = fullfile(dname, df(end, :));
        pathname = [dname '\'];
    else
        msgbox('请选择至少两幅图像!', '提示信息', 'modal');
        return;
    end
else
    msgbox('请选择至少两幅图像!', '提示信息', 'modal');
    return;
end
file = File_Process(filename, pathname);
if length(file) < 2
    msgbox('请选择至少两幅图像!', '提示信息', 'modal');
    return;
end
Img1 = imread(file{1}); 
Img2 = ImageList(file); 
axes(handles.axes1);
imshow(Img1); title('图像序列1', 'FontWeight', 'Bold');
axes(handles.axes2);
imshow(Img2); title('图像序列2', 'FontWeight', 'Bold');

handles.Img1 = Img1;
handles.Img2 = Img2;
handles.file = file;
guidata(hObject, handles);



% --- If Enable == 'on', executes on mouse press in 5 pixel border.
% --- Otherwise, executes on mouse press in 5 pixel border or over pushbutton1.
function pushbutton1_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



% --- Executes on mouse press over axes background.
function axes1_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on mouse press over axes background.
function axes2_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on mouse press over axes background.
function axes3_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on mouse press over axes background.
function axes4_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if isempty(handles.file)
    msgbox('请先载入图像!', '提示信息', 'modal');
    return;
end
if isempty(handles.MStitch)
    msgbox('请先进行图像匹配!', '提示信息', 'modal');
    return;
end
if ~isempty(handles.grayResult)
    msgbox('灰度拼接图像已完成!', '提示信息', 'modal');
    return;
end
if length(handles.file)
    [MStitch, result] = GrayMain_Process(handles.MStitch, ...
        handles.W_box, handles.H_box, handles.bdown);
end
grayResult = im2uint8(mat2gray(result));
axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
imshow(grayResult, []);
title('灰度图像拼接结果', 'FontWeight', 'Bold');

handles.grayResult = grayResult;
guidata(hObject, handles);

msgbox('灰度拼接图像完成!', '提示信息', 'modal');


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if isempty(handles.file)
    msgbox('请先载入图像!', '提示信息', 'modal');
    return;
end
if isempty(handles.MStitch)
    msgbox('请先进行图像匹配!', '提示信息', 'modal');
    return;
end
if ~isempty(handles.RGBResult)
    msgbox('彩色拼接图像已完成!', '提示信息', 'modal');
    return;
end

if length(handles.file)
    [MStitch, result] = RGBMain_Process(handles.MStitch, ...
        handles.W_box, handles.H_box, handles.bdown);
end
RGBResult = im2uint8(mat2gray(result));
axes(handles.axes4); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
imshow(RGBResult, []);
title('彩色图像拼接结果', 'FontWeight', 'Bold');

handles.RGBResult = RGBResult;
guidata(hObject, handles);

msgbox('彩色拼接图像完成!', '提示信息', 'modal');

% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if isempty(handles.grayResult) && isempty(handles.RGBResult)
    msgbox('请先拼接处理图像!', '提示信息', 'modal');
    return;
end

if ~isempty(handles.grayResult)
    figure(1); imshow(handles.grayResult, []);
    title('灰度图像拼接结果', 'FontWeight', 'Bold');
end
if ~isempty(handles.RGBResult)
    figure(2); imshow(handles.RGBResult, []);
    title('彩色图像拼接结果', 'FontWeight', 'Bold');
end
if ~isempty(handles.grayListResult)
    figure(3); imshow(handles.grayListResult, []);
    title('序列灰度图像拼接结果', 'FontWeight', 'Bold');
end
if ~isempty(handles.RGBListResult)
    figure(4); imshow(handles.RGBListResult, []);
    title('序列彩色图像拼接结果', 'FontWeight', 'Bold');
end


% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if isempty(handles.grayResult) && isempty(handles.RGBResult)
    msgbox('请先拼接处理图像!', '提示信息', 'modal');
    return;
end
[filename, pathname] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
    '*.*','All Files' }, '保存结果', ...
    'Result\result.jpg');
if isempty(filename)
    return;
end
[pathstr, name, ext] = fileparts(filename);

if ~isempty(handles.grayResult)
    file = fullfile(pathname, [name, '_gray', ext]);
    imwrite(handles.grayResult, file);
end
if ~isempty(handles.RGBResult)
    file = fullfile(pathname, [name, '_rgb', ext]);
    imwrite(handles.RGBResult, file);
end
if ~isempty(handles.grayListResult)
    file = fullfile(pathname, [name, '_grayList', ext]);
    imwrite(handles.grayListResult, file);
end
if ~isempty(handles.RGBListResult)
    file = fullfile(pathname, [name, '_rgbList', ext]);
    imwrite(handles.RGBListResult, file);
end

msgbox('保存拼接图像成功!', '提示信息', 'modal');

% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if isempty(handles.file)
    msgbox('请先载入图像!', '提示信息', 'modal');
    return;
end
if ~isempty(handles.MStitch)
    msgbox('图像匹配已完成!', '提示信息', 'modal');
    return;
end

file = handles.file;
im1 = imread(file{1});
MStitch.imrgb1 = double(im1); 
im1 = rgb2gray(im1);
MStitch.im1 = double(im1); 
[Pheight, Pwidth] = size(im1);
MStitch.Pwidth = Pwidth; 
MStitch.Pheight = Pheight; 
MStitch.W_min = round(0.60*Pwidth);
MStitch.W_max = round(0.83*Pwidth); 
MStitch.H_min = round(0.98*Pheight); 
MStitch.minval = 255;
im2 = imread(file{2});
MStitch.imrgb2 = double(im2);
im2 = rgb2gray(im2);
im2 = double(im2);
MStitch.im2 = double(im2);
[W_box, H_box, bdown, MStitch] = Fun_Match(im2, MStitch);
msgbox('图像匹配完成!', '提示信息', 'modal');
handles.W_box = W_box;
handles.H_box = H_box;
handles.bdown = bdown;
handles.MStitch = MStitch;
guidata(hObject, handles);


% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
choice = questdlg('您确定要退出图像拼接系统?', ...
    '退出选项', ...
    '退出', '取消', '取消');
switch choice
    case '退出'
        close all;
    case '取消'
        return;
end


% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

if isempty(handles.file)
    msgbox('请先载入图像!', '提示信息', 'modal');
    return;
end
if ~isempty(handles.grayListResult)
    msgbox('序列灰度图像拼接已完成!', '提示信息', 'modal');
    return;
end

if length(handles.file) == 2
    if ~isempty(handles.grayResult)
        msgbox('灰度拼接图像已完成!', '提示信息', 'modal');
        return;
    end
    if isempty(handles.MStitch)
        msgbox('请先进行图像匹配!', '提示信息', 'modal');
        return;
    end
    [MStitch, result] = GrayMain_Process(handles.MStitch, ...
        handles.W_box, handles.H_box, handles.bdown);
    grayResult = im2uint8(mat2gray(result));
    axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
    imshow(grayResult, []);
    title('灰度图像拼接结果', 'FontWeight', 'Bold');
    
    handles.grayResult = grayResult;
    guidata(hObject, handles);
    
    msgbox('灰度拼接图像完成!', '提示信息', 'modal');
else
    [MStitch, result] = GrayListMain_Process(handles.file);
    grayListResult = im2uint8(mat2gray(result));
    axes(handles.axes3); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
    imshow(grayListResult, []);
    title('序列灰度图像拼接结果', 'FontWeight', 'Bold');
    
    handles.grayListResult = grayListResult;
    guidata(hObject, handles);
    
    msgbox('序列灰度拼接图像完成!', '提示信息', 'modal');
end



% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
if isempty(handles.file)
    msgbox('请先载入图像!', '提示信息', 'modal');
    return;
end
if ~isempty(handles.RGBListResult)
    msgbox('序列彩色图像拼接已完成!', '提示信息', 'modal');
    return;
end

if length(handles.file) == 2
    if ~isempty(handles.RGBResult)
        msgbox('彩色拼接图像已完成!', '提示信息', 'modal');
        return;
    end
    if isempty(handles.MStitch)
        msgbox('请先进行图像匹配!', '提示信息', 'modal');
        return;
    end
    [MStitch, result] = RGBMain_Process(handles.MStitch, ...
        handles.W_box, handles.H_box, handles.bdown);
    RGBResult = im2uint8(mat2gray(result));
    axes(handles.axes4); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
    imshow(RGBResult, []);
    title('彩色图像拼接结果', 'FontWeight', 'Bold');
    
    handles.grayResult = grayResult;
    guidata(hObject, handles);
    
    msgbox('彩色拼接图像完成!', '提示信息', 'modal');
else
    [MStitch, result] = RGBListMain_Process(handles.file);
    RGBListResult = im2uint8(mat2gray(result));
    axes(handles.axes4); cla reset; box on; set(gca, 'XTickLabel', [], 'YTickLabel', []);
    imshow(RGBListResult, []);
    title('序列彩色图像拼接结果', 'FontWeight', 'Bold');
    
    handles.RGBListResult = RGBListResult;
    guidata(hObject, handles);
    
    msgbox('序列彩色拼接图像完成!', '提示信息', 'modal');
end

在这里插入图片描述
全景图像拼接效果如图
在这里插入图片描述

本文配套源码及实现案例–下载–>传送门

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第 12 章 基于块匹配的全景图像拼接--Matlab深度学习实战图像处理应用 的相关文章

  • 找到合适的方案记录服务端日志

    做过服务端开发的同学都清楚日志是多么的重要 你要分析应用当天的 PV UV 你需要对日志进行统计分析 你需要排查程序 BUG 你需要寻找日志中的异常信息等等 所以 建立一套合适的日志体系是非常有必要的 日志体系一般都会遵循这么几个原则 根据
  • doPDF——word转为PDF软件的使用方法

    doPDF软件下载链接 xff0c 版本doPDF 7 3 379 点击打开链接 1 下载好doPDF软件我们就可以动手安装了 安装到选择打印机的界面 软件使用方法如图所示 xff08 备注我用的是word2007 xff0c 可能与200
  • 过去的 2017 年

    过去的 2017 年分为两个部分 xff0c 前半部分偏忙碌 xff0c 个人时间较少 xff0c 但是收获甚微 xff1b 后半部分进入了一个学习的环境 xff0c 最主要的就是个人可自由支配的时间多了 xff0c 留给了我很多思考的时间
  • Android四大组件详解

    注 xff1a 本文主要来自网易的一个博主的文章 xff0c 经过阅读 xff0c 总结 xff0c 故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity xff0c Service服务
  • Socket通信原理和实践

    我们深谙信息交流的价值 xff0c 那网络中进程之间如何通信 xff0c 如我们每天打开浏览器浏览网页时 xff0c 浏览器的进程怎么与web服务器通信的 xff1f 当你用QQ聊天时 xff0c QQ进程怎么与服务器或你好友所在的QQ进程
  • linux下查看和添加PATH环境变量

    linux下查看和添加PATH环境变量 PATH xff1a 决定了shell将到哪些目录中寻找命令或程序 xff0c PATH的值是一系列目录 xff0c 当您运行一个程序时 xff0c Linux在这些目录下进行搜寻编译链接 编辑你的
  • Linux 内存映射函数 mmap()函数详解

    一 概述 内存映射 xff0c 简而言之就是将用户空间的一段内存区域映射到内核空间 xff0c 映射成功后 xff0c 用户对这段内存区域的修改可以直接反映到内核空间 xff0c 同样 xff0c 内核空间对这段区域的修改也直接反映用户空间
  • Cygwin获取root权限

    1 找到cygwin 的etc目录中有一个名为passwd的文件 2 用写字板打开passwd 这个文件 xff0c 找到以下部分 xff0c 把其中的windows用户名换成root xff08 共3处都改过来 xff09 Adminis
  • Linux Shell 只列出目录的方法

    在实际应用中 xff0c 我们有时需要仅列出目录 xff0c 下面是 4 种不同的方法 1 利用 ls 命令的 d 选项 xff1a ls d Desktop pic shell src 2 利用 ls 命令的 F 选项 xff1a ls
  • 读《Linux内核设计与实现》我想到了这些书

    从题目中可以看到 xff0c 这篇文章是以我读 Linux内核设计与实现 而想到的其他我读过的书 xff0c 所以 xff0c 这篇文章的主要支撑点是 Linux内核 开始读这本书已经是很久以前的事了 xff0c 不过 xff0c 由于时间
  • 计算机保研复习

    操作系统 1 进程间的通信方式 无名管道pipe xff1a 管道是一种半双工的通信方式 xff0c 数据只能单向流动 xff0c 而且只能在具有亲缘关系的进程间使用 进程的亲缘关系通常是指父子进程关系 命名管道FIFO xff1a 有名管
  • Gyro陀螺仪 > MPU 6000 vs ICM 20689

    目录 参考 MPU 6000和ICM 20689对比 陀螺仪的选择 xff1a 采样率与噪声 参考 Gyro MPU 6000 vs ICM 20689 IntoFPV Forum FPV Drone Flight Controller E
  • PV操作与信号灯及例子+三大操作系统共同点的线程通信

    看待技术问题要瞄准其本质 xff0c 不管是Linux VxWorks还是WIN32 xff0c 其涉及到多线程的部分都是那些内容 xff0c 无非就是线程控制和线程通信 xff0c 它们的许多函数只是名称不同 xff0c 其实质含义是等价
  • docker内使用apt-get update时报Temporary failure resolving ‘security.ubuntu.com错的解决方法

    经常构建docker 镜像的时候 xff0c 在镜像Build时需要经常软件的安装或更新时 xff0c 运行apt get update 或者apt get install 时出现Temporary failure resolving 39
  • ffmpeg 之 RTMP 一

    1 RTMP 介绍 RTMP Real Time Messaging Control 是Adobe 公司flash 播放器和服务器之间的音视 xff0c 视频以及数据传输的流媒体协议 该协议是个协议族 xff0c 包括多种协议 xff0c
  • 移植FreeModbus到FreeRTOS系统上

    实测连接西门子的组态屏运行正常 1 串口驱动移植 portserial c BOOL xMBPortSerialInit UCHAR ucPORT ULONG ulBaudRate UCHAR ucDataBits eMBParity eP
  • 地平线 momenta 华为 百度 毫末 上汽大通等大厂算法机会都有.有考虑的吗?

    base xff1a 北京 上海 苏州 南京 融合算法工程师 视觉算法工程师 规划控制 slam算法 嵌入式应用软件工程师 感知 控制 决策 自动驾驶行业或者机器人行业的1年以上都可以联系 我的微信 xff1a Dmyutmost
  • 解耦,未解耦的区别_幂等与时间解耦之旅

    解耦 未解耦的区别 HTTP中的幂等性意味着相同的请求可以执行多次 xff0c 效果与仅执行一次一样 如果用新资源替换某个资源的当前状态 xff0c 则无论您执行多少次 xff0c 最终状态都将与您仅执行一次相同 举一个更具体的例子 xff
  • FreeRTOS移植STM32超详细(以STM32F103ZE为例)

    我刚学FreeROTS时想移植到STM32 找了网上很多资料 xff0c 但大多都不是很完整 xff0c 于是我把我自己的移植过程分享出来 xff0c 供大家参考 我们以STM32F103ZE xff0c 正点原子的跑马灯实验为例 xff0
  • 以梦为码,最燃的华为开发者大会2020(Cloud)有这些看点

    Write the Code xff0c Change the World 以梦为码 xff0c 这的确是开发者最好的时代 在全球ICT产业遇上几十年未有之大变局之际 xff0c 开发者的重要性与价值毋庸置疑 正如华为公司高级副总裁 Clo

随机推荐