【图像去噪】基于matlab GUI中值+小波+维纳+滤波器图像去噪(含PSNR)【含Matlab源码 616期】_matlab图像去噪-程序员宅基地

技术标签: matlab  Matlab图像处理(进阶版)  

博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
个人主页:海神之光
代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

一、图像去噪及滤波简介

1 图像去噪
1.1 图像噪声定义
噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y)表示图像信号,n(x,y)表示噪声。
图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。去噪是图像处理研究中的一个重点内容。在图像的获取、传输、发送、接收、复制、输出等过程中,往往都会产生噪声,其中的椒盐噪声是比较常见的一种噪声,它属于加性噪声。

1.2 图像噪声来源
(1)图像获取过程中
图像传感器CCD和CMOS采集图像过程中受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。
(2)图像信号传输过程中
传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。

1.3 噪声分类
噪声按照不同的分类标准可以有不同的分类形式:
基于产生原因:内部噪声,外部噪声。
基于噪声与信号的关系:
加性噪声:加性噪声和图像信号强度是不相关的,这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和:
g = f + n;
乘性嗓声:乘性噪声和图像信号是相关的,往往随图像信号的变化而变化,载送每一个象素信息的载体的变化而产生的噪声受信息本身调制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
g = f + f*n
按照基于统计后的概率密度函数:
是比较重要的,主要因为引入数学模型这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

1.4 图像去噪算法的分类
(1)空间域滤波
空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。
(2)变换域滤波
图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。
(3)偏微分方程
偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程,以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。
(4)变分法
另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。
形态学噪声滤除器将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

2 中值滤波
(1)概念:
在这里插入图片描述
(2)原理解释:
在这里插入图片描述
3 小波滤波
随着小波理论的日益完善,其以自身良好的时频特性在图像去噪领域受到越来越多的关注,开辟了用非线性方法去噪的先河。具体来说,小波能够去噪主要得益于小波变换有如下特点:
(1)低熵性。小波系数的稀疏分布,使图像变换后的熵降低。 意思是对信号(即图像)进行分解后,有更多小波基系数趋于0(噪声),而信号主要部分多集中于某些小波基,采用阈值去噪可以更好的保留原始信号。
(2)多分辨率特性。由于采用了多分辨方法,所以可以非常好地刻画信号的非平稳性,如突变和断点等(例如0-1突变是傅里叶变化无法合理表示的),可以在不同分辨率下根据信号和噪声的分布来消除噪声。
(3)去相关性。小波变换可对信号去相关,且噪声在变换后有白化趋势,所以小波域比时域更利于去噪。
(4)基函数选择灵活。小波变换可灵活选择基函数,也可根据信号特点和去噪要求选择多带小波和小波包等(小波包对高频信号再次分解,可提高时频分辨率),对不同场合,选择不同小波基函数。

根据基于小波系数处理方式的不同,常见去噪方法可分为三类:
(1)基于小波变换模极大值去噪(信号与噪声模极大值在小波变换下会呈现不同变化趋势)
(2)基于相邻尺度小波系数相关性去噪(噪声在小波变换的各尺度间无明显相关性,信号则相反)
(3)基于小波变换阈值去噪

小波去噪实现步骤:
(1)二维信号的小波分解。选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。
(2)对高频系数进行阈值量化。对于从1~N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。
(3)二维小波重构。根据小波分解的第N层的低频系数和经过修改的从第一层到第N的各层高频系数,计算二维信号的小波重构。

4 维纳滤波
在这里插入图片描述

5 频域滤波
5.1 主要步骤:空域(傅里叶变换、卷积)>>>频域(与转移函数相乘、处理、傅里叶反变换)>>>空域
5.2 常用频域增强方法:
巴特沃斯滤波器:阶为n,截断频率为D0的转移函数为:
在这里插入图片描述
(1)低通滤波:
低通巴特沃斯滤波器在高低频率间的过渡比较光滑,所以得到的输出图其“振铃”现象不明显。
频域低通滤波器能消除虚假轮廓。
(2)高通滤波:
就是利用滤波器的频率特性,让高频的通过,低频的无法通过,就好比在频率域设置阈值,频率域每一个频率分量有一个“幅值”,滤波器就好比在不同的频率分量给这个幅值乘以不同的增益,高通就好比高频部分增益为1,低频部分增益为0,当然这是理想高通。高斯高通滤波器就是频域每一个频率分量的增益的连接而成的曲线是一个高斯曲线
高通巴特沃斯滤波器.
G( x, y ) = g ( x, y ) + c * f( x, y ) c = 0.5,0<=c<=1
(3)带通和带阻滤波
带阻滤波器:阻止一定频率范围内的信号通过而允许其他频率范围内的信号通过。
带通滤波器:允许一定频率范围内的信号通过而阻止其它频率范围内的信号通过。带通和带阻互补。
低通、高通、带通、带阻等线性滤波器可以较好地消除线性叠加在图像上的加性噪声。但实际中,噪声和图像也常常是以非线性的方式结合。例如光源照明成像的情况,其中光的入射和景物的反射是以相乘的形式对成像做出贡献的,这样成像中的噪声与景物也是相乘的关系。
(4)同态滤波:
是一种在频域中同时将图像亮度范围进行压缩和将图像对比度进行增强的方法。

二、部分源代码

function varargout = dsp1(varargin)
% DSP1 MATLAB code for dsp1.fig
% DSP1, by itself, creates a new DSP1 or raises the existing
% singleton*.
%
% H = DSP1 returns the handle to a new DSP1 or the handle to
% the existing singleton*.
%
% DSP1(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in DSP1.M with the given input arguments.
%
% DSP1(‘Property’,‘Value’,…) creates a new DSP1 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before dsp1_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to dsp1_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 dsp1

% Last Modified by GUIDE v2.5 21-Mar-2014 21:34:03

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @dsp1_OpeningFcn, …
‘gui_OutputFcn’, @dsp1_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 dsp1 is made visible.
function dsp1_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 dsp1 (see VARARGIN)
setappdata(handles.figure1,‘img1’,0);
setappdata(handles.figure1,‘img2’,0);
setappdata(handles.figure1,‘img3’,0);
%set(handles.myimage_compress,‘Enable’, ‘off’);
set(handles.pushbutton_compress,‘Enable’, ‘off’);
set(handles.menu_quzaodesc, ‘Enable’, ‘off’);
set(handles.save, ‘Enable’, ‘off’);

% Choose default command line output for dsp1
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

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

% — Outputs from this function are returned to the command line.
function varargout = dsp1_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;

% — Executes on selection change in popupmenu.
function popupmenu_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns popupmenu contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from popupmenu
val = get(hObject,‘Value’);
str = get(hObject, ‘String’);
switch str{val};
case ‘无’ %
img2=getappdata(handles.figure1,‘img1’);
axes(handles.axes2);
imshow(img2);
setappdata(handles.figure1,‘img2’,img2);
set(handles.pushbutton_listen, ‘Enable’, ‘off’);
case ‘高斯噪声’ %
img2=getappdata(handles.figure1,‘img1’);
img2 = imnoise(img2,‘gaussian’); %加高斯噪声
axes(handles.axes2);
imshow(img2);
setappdata(handles.figure1,‘img2’,img2);
set(handles.menu_quzaodesc, ‘Enable’, ‘on’);
set(handles.pushbutton_listen, ‘Enable’, ‘on’);
case ‘椒盐噪声’ %
img2=getappdata(handles.figure1,‘img1’);
img2 = imnoise(img2,‘salt’);
axes(handles.axes2);
imshow(img2);
setappdata(handles.figure1,‘img2’,img2);
set(handles.menu_quzaodesc, ‘Enable’, ‘on’);
set(handles.pushbutton_listen, ‘Enable’, ‘on’);
case ‘泊松噪声’ %
img2=getappdata(handles.figure1,‘img1’);
img2 = imnoise(img2,‘poisson’);
axes(handles.axes2);
imshow(img2);
setappdata(handles.figure1,‘img2’,img2);
set(handles.menu_quzaodesc, ‘Enable’, ‘on’);
set(handles.pushbutton_listen, ‘Enable’, ‘on’);
case ‘斑点噪声speckle’ %
img2=getappdata(handles.figure1,‘img1’);
img2 = imnoise(img2,‘speckle’);
axes(handles.axes2);
imshow(img2);
setappdata(handles.figure1,‘img2’,img2);
set(handles.menu_quzaodesc, ‘Enable’, ‘on’);
set(handles.pushbutton_listen, ‘Enable’, ‘on’);
end

% — Executes during object creation, after setting all properties.
function popupmenu_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

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

% --------------------------------------------------------------------
function myfile_open_Callback(hObject, eventdata, handles)
% hObject handle to myfile_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile(…
{‘.bmp;.jpg; .png; .jpeg; ','Image Files(.bmp,.jpg,.png,.jpeg)’;…
.’, ‘All Files(.)’ }…
, ‘Pick an image’);%打开文件 选择图像
if isequal(filename,0) || isequal(pathname,0)
return;%如 果点了“ 取 消”
end
axes(handles.axes1);%重要,在哪个坐标轴显示图像
fpath = [pathname filename];%路径名和文件名
img1 = imread(fpath);%读取图像
imshow(img1);%显示图像
setappdata(handles.figure1,‘img1’,img1);

% — Executes on selection change in popupmenu3.
function popupmenu3_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns popupmenu3 contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from popupmenu3
img2=getappdata(handles.figure1,‘img2’);%加噪图像
img1=getappdata(handles.figure1,‘img1’);%原始图像
val = get(hObject,‘Value’);
str = get(hObject, ‘String’);
switch str{val};
case ‘中值滤波’
set(handles.uipanel_lowfilt, ‘Visible’, ‘off’);
set(handles.uipanel_gausslow, ‘Visible’, ‘off’);
set(handles.pushbutton_quzao, ‘Visible’, ‘off’);
img3 = medfilt2(img2);%中值滤波
setappdata(handles.figure1,‘img3’,img3);
axes(handles.axes3);
imshow(img3);
PSNR = psnr2(img3, img1);
str1 = strcat('psnr为: ’ , num2str(PSNR) , ‘db’);
set(handles.text3, ‘string’, str1); %显示PSNR值
set(handles.save, ‘Enable’, ‘on’);
% set(handles.myimage_compress,‘Enable’, ‘on’);
set(handles.pushbutton_compress,‘Enable’, ‘on’);
case ‘维纳滤波’
set(handles.uipanel_lowfilt, ‘Visible’, ‘off’);
set(handles.uipanel_gausslow, ‘Visible’, ‘off’);
set(handles.pushbutton_quzao, ‘Visible’, ‘off’);
img3 = wiener2(img2,[5,5]);
setappdata(handles.figure1,‘img3’,img3);
axes(handles.axes3);
imshow(img3);
PSNR = psnr2(img3, img1);
str1 = strcat('psnr为: ’ , num2str(PSNR) , ‘db’);
set(handles.text3, ‘string’, str1);
% set(handles.myimage_compress,‘Enable’, ‘on’);
set(handles.pushbutton_compress,‘Enable’, ‘on’);
set(handles.save, ‘Enable’, ‘on’);

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]李秀梅,张奇伟,应广之.基于Matlab的图像去噪可视化系统设计[J].杭州师范大学学报(自然科学版). 2012,11(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TIQCmatlab/article/details/115149919

智能推荐

react:react-cropper插件,实现图片裁剪upload上传功能-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏14次。因业务需求,需要用户自定义个人头像(图片剪切上传);调研了之后,决定使用react-cropper插件来实现头像上传功能!react-cropper插件还是很全面不错的, 满足了功能的需要。步骤实现:1、安装 npm install --save react-cropper2、文件引入 import "cropperjs/dist/cropper.css..._react-cropper

青龙之腾讯自选股_青龙 腾讯自选股-程序员宅基地

文章浏览阅读8.4k次,点赞3次,收藏33次。1、青龙面板中选择添加任务2、拉取脚本扣扣裙获取脚本:9846983523、手动运行一次此任务,拉取脚本到青龙4、编辑一下拉下来的定时任务的定时,改成35 11,16 * * *5、准备工作5-1、下载【腾讯自选股】APP,可以直接appstore下载。5-2、关注腾讯自选股微信版|微证券 公众号腾讯自选股微信版|微证券6、打开抓包软件准备抓包。我下面直接用圈x举例了。圈x长按风车,弹出菜单中点击HTTP数据抓取按钮,将其打开共需要获取三个c_青龙 腾讯自选股

笔记8:vb.net的二进制数据流BinaryReader、BinaryWriter_vb.netbinaryreader-程序员宅基地

文章浏览阅读7.9k次。前面的FileStream、BufferedStream、MemoryStream类都是派生于Stream类。 二进制数据流不同,它并不派生于Stream,而是直接派生于System.Object类。 因此,天生不足,它只有串接到Stream类或派生类中进行操作,即二进制数据流的构造都要用Stream类。 二进_vb.netbinaryreader

优化C语言代码(程序员必读)_编译器再什么时候会优化代码 c-程序员宅基地

文章浏览阅读232次。1、选择合适的算法和数据结构 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具_编译器再什么时候会优化代码 c

sql 按字段指定值排序-程序员宅基地

文章浏览阅读157次。这个需要在排序语句中使用条件判断例如:表【Table_temp】中列【col1】为字符,属性为varchar(10),排序时需要按照B、A、C的顺序显示,则可按照以下SQL语句:select *from Table_temporder by case when col1='B' then 1 when c..._sql 特定数据排序

win10中wpcap.dll丢失的解决办法_找不到wpcap.dll-程序员宅基地

文章浏览阅读3.9w次,点赞15次,收藏17次。在使用windump时,提示wpcap.dll丢失。解决办法:下载win10pcap.msi,并安装,则可以解决这个问题。网址:http://www.win10pcap.org/download/_找不到wpcap.dll

随便推点

JAVA的Calendar类set月份的时候,月份会比输入的加1_(calendar.month)总是大1-程序员宅基地

文章浏览阅读4.7k次。今天产品跟我反馈后台管理系统上传数据的时候,命名输入的是 2018/11/16,但是上传之后显示的时间是 2018/12/16我用的是Calendar.set(Calendar.MONTH, )我就觉得很奇怪啊,我的代码没问题啊,然后去看数据库的时间戳,发现真的是 2018/12/16那么我们可以将问题锁定到下图的红框框中那么好,现在很显然我们可以改为month-1来修改我们..._(calendar.month)总是大1

crontab 定时执行php脚本文件_crontable 执行php-程序员宅基地

文章浏览阅读919次。什么是Cron和CrontabUnix和Linux系统的各个发行版本基本都支持Cron,Cron /Crontab允许我们在设定的时间自动执行或定时执行某个任务,如应用程序或脚本。更详细的概念和使用方法介绍请点击Cron和Crontab是什么?现在我们要讨论的是,许多的php程序员都可以很快完成Web应用的开发,PHP代码的调试也比PERL或C语言容易很多,不过经常会碰到有php_crontable 执行php

vue3 组合式风格setup笔记(定义变量、函数 data和method的setup写法)_vue3 methods和data写法-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏2次。vue3 组合式风格 变量定义(对应data)、函数定义(对应method)_vue3 methods和data写法

子串判断_给定俩个字符串a和b,其中a 的长度大于b-程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏7次。从键盘输入两个长度小于80的字符串A和B,且A的长度大于B的长度,编程判断B是不是A的子串,如果是,则输出”Yes”,否则输出”No”。这里所谓的该串的子串是指字符串中任意多个连续的字符组成的子序列。函数原型:int IsSubString(char a[], char b[]);函数功能:判断b是否是a的子串,是则返回1,否则返回0程序运行结果示例1:Input the firs..._给定俩个字符串a和b,其中a 的长度大于b

企业微信支付提示请在微信客户端打开链接_微信h5支付?-程序员宅基地

文章浏览阅读4.1k次。如果您是使用浏览器的移动网页进行支付,那就是调用微信H5支付,如果是使用APP客户端进行支付,那就要调用微信APP支付。H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。顺便提醒一下,H5支付不建议在APP端使用,如需要在APP中使用微信...

微信web开发者工具-程序员宅基地

文章浏览阅读1.1k次。 概述为帮助开发者更方便、更安全地开发和调试基于微信的网页,我们推出了 web 开发者工具。它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发和调试工作。立即下载体验你可以:使用自己的微信号来调试微信网页授权调试、检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入和输出使用基于 weinre ..._微信web开发者工具 谁开发的

推荐文章

热门文章

相关标签