Canny算子边缘检测原理以及实现
Canny算子边缘检测原理以及实现
原理解析
基于卷积运算的边缘检测算法,比如Sobel、Prewitt等,有以下几个缺点:
- 没有充分利用边缘的梯度方向。
- 最后输出的边缘二值图,只是简单的利用阈值进行处理,显然如果阈值过大,则会损失很多边缘信息;如果阈值过小,则会出现很多的噪声。
而Canny边缘检测基于这两点进行的改进,提出:
- 基于梯度方向的非极大值抑制。
- 双阈值的滞后阈值处理。
步骤
- 利用高斯滤波来平滑图像,目的是去噪声。
- 寻找图像的强度梯度,和方向。
- 利用非极大值抑制来消除边误检。(其实是对边缘强度图进行细化)
- 双阈值的滞后阈值处理。
1、高斯平滑(略)
2、计算梯度幅度和方向
这个步骤可采用的算子有:Roberts、Prewitt、Sobel、Scharr等。
一般采用soble算子,OpenCV也是如此,利用soble水平和垂直算子与输入图像卷积计算dx、dy。也可用Prewitt和Scharr,不建议用Roberts,因为Roberts算子边缘检测使用了很少的邻域像素来近似边缘强度,因为对图像的噪声具有高度敏感性。
下面采用soble算子为例:
soble算子具有分离性。图像f(x,y)分别于卷积核Sobel.x和卷积核Sobel.y卷积得到水平方向的强度梯度dx和垂直方向的强度梯度dy。
边缘强度为:
为了简化计算,幅值也可以作如下近似:
梯度方向为:
3、利用非极大值抑制来消除边误检。
如图a,在点(1,1)处放置坐标轴。图b,知道梯度方向后的邻域,将(1,1)点的边缘强度912与左下方的270以及右上方的292做比较,912>270&&912>292,所以这个点可以极大值,如果不全大于这两个值,则就需要抑制了,令这个点(1,1)=0。其他的点方法类似。
至于方向如何判断呢?梯度方向一般离散化为一下四种情况:
非极大值抑制的第二种方式:插值法
插值法能够更加的衡量梯度方向上的边缘强度。
4. 双阈值的滞后阈值处理
- 选取系数TH和TL,比率为2:1或3:1
- 将小于低阈值的点抛弃,赋0;将大于高阈值的点立即标记(这些点为确定边缘点)
- 将小于高阈值,大于低阈值的点使用8连通区域确定
代码:
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
cv::Mat non_maximum_suppression_Inter(cv::Mat dx, cv::Mat dy);
////////////////////sobel算子/////////////////////////
//阶乘
int factorial(int n) {int fac = 1;//0的阶乘if (n == 0)return fac;for (int i = 1; i <= n; ++i) {fac *= i;}return fac;
}//获得Sobel平滑算子
cv::Mat getSobelSmoooth(int wsize) {int n = wsize - 1;cv::Mat SobelSmooothoper = cv::Mat::zeros(cv::Size(wsize, 1), CV_32FC1);for (int k = 0; k <= n; k++) {float *pt = SobelSmooothoper.ptr<float>(0);pt[k] = factorial(n) / (factorial(k)*factorial(n - k));}return SobelSmooothoper;
}//获得Sobel差分算子
cv::Mat getSobeldiff(int wsize) {cv::Mat Sobeldiffoper = cv::Mat::zeros(cv::Size(wsize, 1), CV_32FC1);cv::Mat SobelSmoooth = getSobelSmoooth(wsize - 1);for (int k = 0; k < wsize; k++) {if (k == 0)Sobeldiffoper.at<float>(0, k) = 1;else if (k == wsize - 1)Sobeldiffoper.at<float>(0, k) = -1;elseSobeldiffoper.at<float>(0, k) = SobelSmoooth.at<float>(0, k) - SobelSmoooth.at<float>(0, k - 1);}return Sobeldiffoper;
}//卷积实现
void conv2D(cv::Mat& src, cv::Mat& dst, cv::Mat kernel, int ddepth, cv::Point anchor = cv::Point(-1, -1), int delta = 0, int borderType = cv::BORDER_DEFAULT) {cv::Mat kernelFlip;cv::flip(kernel, kernelFlip, -1);cv::filter2D(src, dst, ddepth, kernelFlip, anchor, delta, borderType);
}//可分离卷积———先垂直方向卷积,后水平方向卷积
void sepConv2D_Y_X(cv::Mat& src, cv::Mat& dst, cv::Mat kernel_Y, cv::Mat kernel_X, int ddepth, cv::Point anchor = cv::Point(-1, -1), int delta = 0, int borderType = cv::BORDER_DEFAULT) {cv::Mat dst_kernel_Y;conv2D(src, dst_kernel_Y, kernel_Y, ddepth, anchor, delta, borderType); //垂直方向卷积conv2D(dst_kernel_Y, dst, kernel_X, ddepth, anchor, delta, borderType); //水平方向卷积
}//可分离卷积———先水平方向卷积,后垂直方向卷积
void sepConv2D_X_Y(cv::Mat& src, cv::Mat& dst, cv::Mat kernel_X, cv::Mat kernel_Y, int ddepth, cv::Point anchor = cv::Point(-1, -1), int delta = 0, int borderType = cv::BORDER_DEFAULT) {cv::Mat dst_kernel_X;conv2D(src, dst_kernel_X, kernel_X, ddepth, anchor, delta, borderType); //水平方向卷积conv2D(dst_kernel_X, dst, kernel_Y, ddepth, anchor, delta, borderType); //垂直方向卷积
}//Sobel算子边缘检测
//dst_X 垂直方向
//dst_Y 水平方向
void Sobel(cv::Mat& src, cv::Mat& dst_X, cv::Mat& dst_Y, cv::Mat& dst, int wsize, int ddepth, cv::Point anchor = cv::Point(-1, -1), int delta = 0, int borderType = cv::BORDER_DEFAULT) {cv::Mat SobelSmooothoper = getSobelSmoooth(wsize); //平滑系数cv::Mat Sobeldiffoper = getSobeldiff(wsize); //差分系数//可分离卷积———先垂直方向平滑,后水平方向差分——得到垂直边缘sepConv2D_Y_X(src, dst_X, SobelSmooothoper.t(), Sobeldiffoper, ddepth);//可分离卷积———先水平方向平滑,后垂直方向差分——得到水平边缘sepConv2D_X_Y(src, dst_Y, SobelSmooothoper, Sobeldiffoper.t(), ddepth);//边缘强度(近似)dst = abs(dst_X) + abs(dst_Y);cv::convertScaleAbs(dst, dst); //求绝对值并转为无符号8位图
}//确定一个点的坐标是否在图像内
bool checkInRang(int r, int c, int rows, int cols) {if (r >= 0 && r < rows && c >= 0 && c < cols)return true;elsereturn false;
}//从确定边缘点出发,延长边缘
void trace(cv::Mat &edgeMag_noMaxsup, cv::Mat &edge, float TL, int r, int c, int rows, int cols) {if (edge.at<uchar>(r, c) == 0) {edge.at<uchar>(r, c) = 255;for (int i = -1; i <= 1; ++i) {for (int j = -1; j <= 1; ++j) {float mag = edgeMag_noMaxsup.at<float>(r + i, c + j);if (checkInRang(r + i, c + j, rows, cols) && mag >= TL)trace(edgeMag_noMaxsup, edge, TL, r + i, c + j, rows, cols);}}}
}//Canny边缘检测
void Edge_Canny(cv::Mat &src, cv::Mat &edge, float TL, float TH, int wsize = 3, bool L2graydient = false) {int rows = src.rows;int cols = src.cols;//高斯滤波cv::GaussianBlur(src, src, cv::Size(5, 5), 0.8);//sobel算子cv::Mat dx, dy, sobel_dst;Sobel(src, dx, dy, sobel_dst, wsize, CV_32FC1);//计算梯度幅值cv::Mat edgeMag;if (L2graydient)cv::magnitude(dx, dy, edgeMag); //开平方elseedgeMag = abs(dx) + abs(dy); //绝对值之和近似//计算梯度方向 以及 非极大值抑制cv::Mat edgeMag_noMaxsup = cv::Mat::zeros(rows, cols, CV_32FC1);for (int r = 1; r < rows - 1; ++r) {for (int c = 1; c < cols - 1; ++c) {float x = dx.at<float>(r, c);float y = dy.at<float>(r, c);float angle = std::atan2f(y, x) / CV_PI * 180; //当前位置梯度方向float mag = edgeMag.at<float>(r, c); //当前位置梯度幅值//非极大值抑制//垂直边缘--梯度方向为水平方向-3*3邻域内左右方向比较if (abs(angle) < 22.5 || abs(angle) > 157.5) {float left = edgeMag.at<float>(r, c - 1);float right = edgeMag.at<float>(r, c + 1);if (mag >= left && mag >= right)edgeMag_noMaxsup.at<float>(r, c) = mag;}//水平边缘--梯度方向为垂直方向-3*3邻域内上下方向比较if ((angle >= 67.5 && angle <= 112.5) || (angle >= -112.5 && angle <= -67.5)) {float top = edgeMag.at<float>(r - 1, c);float down = edgeMag.at<float>(r + 1, c);if (mag >= top && mag >= down)edgeMag_noMaxsup.at<float>(r, c) = mag;}//+45°边缘--梯度方向为其正交方向-3*3邻域内右上左下方向比较if ((angle > 112.5 && angle <= 157.5) || (angle > -67.5 && angle <= -22.5)) {float right_top = edgeMag.at<float>(r - 1, c + 1);float left_down = edgeMag.at<float>(r + 1, c - 1);if (mag >= right_top && mag >= left_down)edgeMag_noMaxsup.at<float>(r, c) = mag;}//+135°边缘--梯度方向为其正交方向-3*3邻域内右下左上方向比较if ((angle >= 22.5 && angle < 67.5) || (angle >= -157.5 && angle < -112.5)) {float left_top = edgeMag.at<float>(r - 1, c - 1);float right_down = edgeMag.at<float>(r + 1, c + 1);if (mag >= left_top && mag >= right_down)edgeMag_noMaxsup.at<float>(r, c) = mag;}}}//双阈值处理及边缘连接edge = cv::Mat::zeros(rows, cols, CV_8UC1);for (int r = 1; r < rows - 1; ++r) {for (int c = 1; c < cols - 1; ++c) {float mag = edgeMag_noMaxsup.at<float>(r, c);//大于高阈值,为确定边缘点if (mag >= TH)trace(edgeMag_noMaxsup, edge, TL, r, c, rows, cols);else if (mag < TL)edge.at<uchar>(r, c) = 0;}}
}
void Edge_Canny_in(cv::Mat &src, cv::Mat &edge, float TL, float TH, int wsize = 3, bool L2graydient = false) {int rows = src.rows;int cols = src.cols;//高斯滤波cv::GaussianBlur(src, src, cv::Size(5, 5), 0.8);//sobel算子cv::Mat dx, dy, sobel_dst;Sobel(src, dx, dy, sobel_dst, wsize, CV_32FC1);//计算梯度幅值cv::Mat edgeMag;if (L2graydient)cv::magnitude(dx, dy, edgeMag); //开平方elseedgeMag = abs(dx) + abs(dy); //绝对值之和近似cv::Mat edgeMag_noMaxsup = non_maximum_suppression_Inter(dx, dy);//双阈值处理及边缘连接edge = cv::Mat::zeros(rows, cols, CV_8UC1);for (int r = 1; r < rows - 1; ++r) {for (int c = 1; c < cols - 1; ++c) {float mag = edgeMag_noMaxsup.at<float>(r, c);//大于高阈值,为确定边缘点if (mag >= TH)trace(edgeMag_noMaxsup, edge, TL, r, c, rows, cols);else if (mag < TL)edge.at<uchar>(r, c) = 0;}}
}
int main() {cv::Mat src = cv::imread("l0.png");if (src.empty()) {return -1;}if (src.channels() > 1) cv::cvtColor(src, src, cv::ColorConversionCodes::COLOR_BGR2GRAY);cv::Mat edge, edge_in,dst;//CannyEdge_Canny(src, edge, 20, 60);Edge_Canny_in(src, edge_in, 20, 60);//opencv自带Cannycv::Canny(src, dst, 20, 60);cv::namedWindow("src");imshow("src", src);cv::namedWindow("My_canny");imshow("My_canny", edge);cv::namedWindow("My_canny_in");imshow("My_canny_in", edge_in);cv::namedWindow("Opencv_canny");imshow("Opencv_canny", dst);cv::waitKey(0);return 0;
}
//非极大值抑制 : 插值比较
cv::Mat non_maximum_suppression_Inter(cv::Mat dx, cv::Mat dy)
{//使用平方和开方的方式计算边缘强度cv::Mat edgeMag;cv::magnitude(dx, dy, edgeMag);//宽高int rows = dx.rows;int cols = dy.cols;//边缘强度的非极大抑制cv::Mat edgeMag_nonMaxSup = cv::Mat::zeros(dx.size(), dx.type());for (int r = 1; r < rows - 1; r++){for (int c = 1; c < cols - 1; c++){float x = dx.at<float>(r, c);float y = dy.at<float>(r, c);if (x == 0 && y == 0)continue;float angle = atan2f(y, x) / CV_PI * 180;//领域内八个方向上的边缘强度float leftTop = edgeMag.at<float>(r - 1, c - 1);float top = edgeMag.at<float>(r - 1, c);float rightBottom = edgeMag.at<float>(r + 1, c + 1);float right = edgeMag.at<float>(r, c + 1);float rightTop = edgeMag.at<float>(r - 1, c + 1);float leftBottom = edgeMag.at<float>(r + 1, c - 1);float bottom = edgeMag.at<float>(r + 1, c);float left = edgeMag.at<float>(r, c - 1);float mag = edgeMag.at<float>(r, c);//左上方与上方的插值 右下方和下方的插值if ((angle > 45 && angle <= 90) || (angle > -135 && angle <= -90)){float ratio = x / y;float top = edgeMag.at<float>(r - 1, c);//插值float leftTop_top = ratio * leftTop + (1 - ratio)*top;float rightBottom_bottom = ratio * rightBottom + (1 - ratio)*bottom;if (mag > leftTop_top && mag > rightBottom_bottom)edgeMag_nonMaxSup.at<float>(r, c) = mag;}//右上方和上方的插值 左下方和下方的插值if ((angle > 90 && angle <= 135) || (angle > -90 && angle <= -45)){float ratio = abs(x / y);float rightTop_top = ratio * rightTop + (1 - ratio)*top;float leftBottom_bottom = ratio * leftBottom + (1 - ratio)*bottom;if (mag > rightTop_top && mag > leftBottom_bottom)edgeMag_nonMaxSup.at<float>(r, c) = mag;}//左上方和左方的插值 右下方和右方的插值if ((angle >= 0 && angle <= 45) || (angle > -180 && angle <= -135)){float ratio = y / x;float rightBottom_right = ratio * rightBottom + (1 - ratio)*right;float leftTop_left = ratio * leftTop + (1 - ratio)*left;if (mag > rightBottom_right && mag > leftTop_left)edgeMag_nonMaxSup.at<float>(r, c) = mag;}//右上方和右方的插值 左下方和左方的插值if ((angle > 135 && angle <= 180) || (angle > -45 && angle <= 0)){float ratio = abs(y / x);float rightTop_right = ratio * rightTop + (1 - ratio)*right;float leftBottom_left = ratio * leftBottom + (1 - ratio)*left;if (mag > rightTop_right && mag > leftBottom_left)edgeMag_nonMaxSup.at<float>(r, c) = mag;}}}return edgeMag_nonMaxSup;
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- GB GB/T ISO QC/T CISPR的含义
ISO:国际标准化组织(International Organization for Standardization),简称ISO,是一个全球性的非政府组织,成立于1947年,总部设立在瑞士日内瓦,国际标准化组织的目的和宗旨是:“在全世界范围内促进标准化工作的开展,以便于国际物资交流和服务,并扩大在知识、科学、…...
2024/4/28 2:31:03 - 小白学Java21:网络编程01
网络编程01InetAddress创建本机的IP地址对象创建局域网的IP地址对象创建外网的IP地址对象基于TCP的网络编程Socket编程创建服务器创建客户端使用TCP实现多个客户端连接到一个服务器 InetAddress表示IP地址对象,封装了与该IP地址相关的所有信息创建本机的IP地址对象InetAddress …...
2024/4/28 0:15:58 - 初入大学的IT小白的生活小感
一些自己的大学生活的感受,也不一定正确,就当茶余饭后的玩笑吧,但其中个人想法确实为本人真实想法 作为幸运人,还好没在今年参加高考,还要在学校苦熬一个月。但是进入大学之后发现,大学为什么比高中还累?? 唉!!告诫快要高考的高三学子,珍惜剩下的一个月吧。也提前祝…...
2024/4/28 10:21:04 - 入坑码农(第三月)
写这期博客才发现上个月的任务完成情况简直惨不忍睹啊!! 计算机基础的视频看到了网络,Java基本语法没学完,多线程还没开始,力扣的数据结构卡只刷了一张,周赛和大佬合作一次才进的前15%。五月份发生的变化有点大,学习的状态还是一直在下降,我感觉我很难靠自己来找回以前…...
2024/4/24 11:37:44 - 只要还有一口气,就没有丝毫理由绝望
命运的舵是斗争。不要有幻想的痕迹,不要放弃一点机会,一天也不要停止努力。 如果你害怕前面的山和险阻,生命将永远是一滩死水。 梯子上的楼梯绝对不是用来放脚的。它只是让人们的脚放一段时间,以便另一只脚可以再爬上去。 创造才是真正的快乐,只有努力,才是充实的生活。任…...
2024/4/24 11:37:40 - 《UnityAPI.Transform变换》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Transform+eulerAngles+LookAt+立钻哥哥++OK++)
《UnityAPI.Transform变换》版本作者参与者完成日期备注UnityAPI_Transform_V01_1.0严立钻2020.06.07#《UnityAPI.Transform变换》发布说明:++++“UnityAPI.Transform变换”是对UnityAPI中Transform变换类的剖析和拓展;立钻哥哥:Unity是一个入门快、提高难的游戏引擎,想要提…...
2024/4/28 8:19:47 - JVM堆中新生代,老年代,永久代(思维导图)
新生代的GC过程叫做MinorGC,采用复制算法,流程如下:(1)把在Eden区与ServivorFrom区中存活的对象复制到ServivorTo区。如果某对象的年龄达到老年代的标准(对象晋升老年代的标准由XX:MaxTenuringThreshold设置,默认为15),则将其复制到老年代,同时把这些对象的年龄加1。…...
2024/4/24 11:37:41 - 配置Android SDK之后,运行adb 失败,我是如何解决的
配置Android SDK之后,运行adb 失败 首先,我安装SDK成功了。 我开始配置环境变量 首先第一次错误: 我将环境变量里面的path混淆了,不是编辑的系统变量里面的path,而是用户变量里面的,因此配置失败。后来,我配置到系统变量里面,仔细检查,确定路径没有写错,打开cmd, 运行…...
2024/4/24 11:37:33 - Swing实战和JDK8新特性
Version:邢朋辉一、今日内容 1.课程回顾1.TCP:传输控制协议 面向连接、安全可靠、传输不限大小、性能相对不高 核心类: ServerSocket:服务端 核心方法: accept 监听、阻塞 客户端的连接 Socket:客户端 一个服务端可以有多个客户端 核心方法…...
2024/4/26 9:44:42 - PTA——基础编程题 | 6-13 折半查找 (15分)
给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。 函数接口定义: int Search_Bin(SSTable T, KeyType k)其中T是有序表,k是查找的值。 裁判测试程序样例: #include <iostream> using namespace std;#define MAXSIZE 50…...
2024/4/26 7:21:14 - mysql content list
1. mysql 官方中文手册 https://www.docs4dev.com/docs/zh/mysql/5.7/reference....
2024/4/24 11:37:33 - WEEK6 周记 月模拟题——路径解释_CSP201604-3
一、题意 1.简述2.样例 Input 7 /d2/d3 /d2/d4/f1 …/d4/f1 /d1/./f1 /d1///f1 /d1/ /// /d1/…/…/d2 Output /d2/d4/f1 /d2/d4/f1 /d1/f1 /d1/f1 /d1 / /d2 Hint二、算法 主要思路 是一道中级模拟题。思路比较简单,处理字符串较为复杂,如果对于处理字符串的方法很熟悉,这道…...
2024/4/24 11:37:36 - hive 求最大最小值均值及对应的一个key键(对应行)
hive 求最大最小均值就不多说了。 此次在业务上碰到一个问题,是要求最大值、最小值、平均值的同时,还要求最大值、最小值对应行的key字段(以找到对应时间)。并且key中的时间戳还是0时区,在查询时要注意对时区进行转换。 表结构大致如下: key double id+时间 …...
2024/4/18 20:24:16 - Pythonista3安装stash后,启动lauch_stash.py失败
Pythonista3 安装stash后启动lauch_stash.py失败 为了让ipad从爱奇艺变成生产力,花了人民币68元买了Pythonista3,但是前进道路并不顺利。 1、界面风格 喜欢Dark模式,比较有编程的感觉,但是只有把IOS调整成”深色”模式才支持,我妥协了。 2、其次就开始装stash 试了好几个地…...
2024/4/20 5:19:44 - Boosting算法原理解析与例题分析
Boosting算法原理解析与例题分析题目解析 1、x为数据编号 2、y为真实结果,这里可以理解为1为好瓜,-1为坏瓜 3、主观预测 阈值:2.5,5.5,8.5 解释: 抛开孤独的9不讲,“0 1 2”、“3 4 5”、“6 7 8”这是3类不同的数据,分别对应的类是1、-1、1,直观上推测可知,可以找到…...
2024/4/15 5:01:39 - SpringBoot ~ 文件上传
SpringBoot ~ 文件上传SpringBoot中对文件上传做了简化,使文件上传变得非常方便依赖添加(pom.xml)(基本依赖) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency…...
2024/4/15 5:01:38 - 《机器视觉算法与应用》第3章 机器视觉算法之边缘提取——学习笔记
文章目录3.7 边缘提取 3.7 边缘提取 待写,敬请关注...
2024/4/24 11:37:30 - Penn 于 2020/6/4 星期四 8:40 修改
...
2024/4/24 11:37:27 - java的Swing组件模拟qq登录界面
代码来自传智播客第二版(java)图片可根据自己喜好下载相关图片,建议将图片放到工作空间的目录下面,这样就可以直接获取图片,例如以这个格式“xxx.jpg”,xxx图片名,jpg格式,由于时间仓促,做出来的效果有点不堪入目哈哈。 登录账号123456789密码123 CreatePanel.javaimp…...
2024/4/24 11:37:33 - 二十九
内存布局: 不同内存布局区域的含义 stack(栈):方法调用 heap(堆):通过alloc等分配的对象 bss:未初始化的全局变量 data:已初始化的全局变量 text:程序代码 ARC和MRC 1.MRC 手动引用计数 alloc retain release retainCount autorelease dealloc 2.ARC 自动引用计数 AR…...
2024/4/24 11:37:28
最新文章
- Redis(五) Redis锁
结合前四期 Redis(一) Redis简介(Redis(一) Redis简介-CSDN博客) Redis(二) 可编程性(Redis(二) 可编程性-CSDN博客) Redis(三) 事务与发布订阅(Redis(三) 事务与发布订阅-CSDN博客) Redis(四) 主从、哨兵、集群环境搭建(Redis(四) 主从、哨兵、集群环境搭建-CSDN博客) (本文代…...
2024/4/28 14:32:37 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Go语言中如何实现继承
完整课程请点击以下链接 Go 语言项目开发实战_Go_实战_项目开发_孔令飞_Commit 规范_最佳实践_企业应用代码-极客时间 Go语言中没有传统意义上的类和继承的概念,但可以通过嵌入类型(embedded types)来实现类似的功能。嵌入类型允许一个结构…...
2024/4/23 6:14:42 - 字符串匹配算法之BF与KMP算法
目录 BF算法(暴力匹配算法) KMP算法 核心思想: next数组 next数组的优化 BF算法(暴力匹配算法) #include <assert.h> int BF(const char* str, const char* sub) {assert(str ! NULL && sub ! NULL);if (str NULL || sub NULL){return -1;}int…...
2024/4/26 13:54:05 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/28 13:52:11 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/28 13:51:37 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57