OpenCV的简单练习
1、读取一张彩色图像并将其转换为灰度图。
import matplotlib.pyplot as pltimg = plt.imread("./flower.png")
# 灰度化
img_gray = img[:,:,0]*0.299 + img[:,:,1]*0.587 + img[:,:,2]*0.114plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(img_gray,cmap='gray')
plt.tight_layout()
plt.show()
2、编写程序,读取一张彩色图像【flower.png】,将其转换为灰度图,然后进行二值化处理。接着,对二值化后的图像执行腐蚀和膨胀操作,并显示处理前后的图像。
import cv2# 读取图像
img = cv2.imread("./flower.png")# 调整图片大小为400x400像素
img = cv2.resize(img, (400,400))# 将图像从BGR颜色空间转换为灰度图像
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 自适应阈值二值化
# 对灰度图像进行自适应二值化处理,以增强图像处理效果
img_adaptive_binary = cv2.adaptiveThreshold(img_gray, # 参数1:输入的灰度图像255, # 参数2: 二值化处理后的最大值cv2.ADAPTIVE_THRESH_GAUSSIAN_C, # 参数3: 使用局部均值作为阈值计算方法cv2.THRESH_BINARY_INV, # 参数4: 使用二值化阈值处理方式7, # 参数5: 邻域大小,用于计算阈值的区域范围5) # 参数6: 常数C,计算阈值时从均值中减去的值# 创建椭圆形结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
# 腐蚀图像
img_erode = cv2.erode(img_adaptive_binary,kernel)
# 先腐蚀后膨胀图像
img_erode_dilate = cv2.dilate(img_erode,kernel)# 显示腐蚀后的图像
cv2.imshow("img_erode",img_erode)
# 显示自适应二值化后的图像
cv2.imshow("img_adaptive_binary",img_adaptive_binary)
# 显示先腐蚀后膨胀的图像
cv2.imshow("img_erode_dilate",img_erode_dilate)
# 等待按键按下
cv2.waitKey(0)
3、编写程序,读取一张彩色图像,执行以下操作:
- 将图像缩放至指定大小(例如,宽度和高度都缩小为原来的一半)。
- 对缩放后的图像应用仿射变换,实现图像的旋转(例如,旋转45度)。
- 将图像从BGR颜色空间转换为HSV颜色空间,并提取出特定的颜色范围(例如,提取黄色区域)。
- 显示处理后的图像,并在图像上标记出识别到的颜色区域。
import cv2
import numpy as np# 读取图片并调整大小
img = cv2.imread('./color_1.png')
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)# 计算图像旋转的变换矩阵,围绕图像中心旋转45度,缩放因子为1
M = cv2.getRotationMatrix2D((img.shape[1]/2, img.shape[0]/2), 45, 1)# 应用仿射变换,旋转图像
img_warp = cv2.warpAffine(img, # 要旋转的图像M, # 变换矩阵(img.shape[1], img.shape[0]), # 输出图像的大小flags=cv2.INTER_LINEAR, # 插值方式borderMode=cv2.BORDER_WRAP # 边缘填充方式,默认是常数填充显示为黑色)# 将图片从BGR颜色空间转换到HSV颜色空间
img_hsv = cv2.cvtColor(img_warp,cv2.COLOR_BGR2HSV)# 定义黄色的HSV范围
yellow_min = np.array([26,43,46])
yellow_max = np.array([34,255,255])# 根据黄色的HSV范围创建掩码
img_color = cv2.inRange(img_hsv,yellow_min,yellow_max)# 使用中值滤波去除噪声
img_median_blur = cv2.medianBlur(img_color,5)# 获取椭圆形的结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))# 腐蚀图像以去除不需要的细节
img_erode = cv2.erode(img_median_blur,kernel)# 膨胀图像以恢复目标区域的大小
img_erode_dilate = cv2.dilate(img_erode,kernel)# 查找轮廓
contours,hierarchy = cv2.findContours(img_erode_dilate,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)# 复制原图以绘制轮廓
img_warp_copy = img_warp.copy()# 遍历所有轮廓,筛选出面积符合要求的轮廓并绘制
for i in contours:if cv2.contourArea(i)<200 or cv2.contourArea(i)>20000000:continuecv2.drawContours(img_warp_copy,[i],0,(0,0,255),2)# 显示原图和绘制了轮廓的图像
cv2.imshow('img',img)
cv2.imshow('img_draw',img_warp_copy)
cv2.waitKey(0)
4、编写程序,读取一张彩色图像,执行以下操作
- 找到原图 和目标图的四个点,获取透视变换矩阵
- 对图像应用透视变换,实现油画区域的矫正
# 导入OpenCV和NumPy库
import cv2
import numpy as np# 读取图片文件
img = cv2.imread('./youhua.png')# 定义四个点,这些点是图片中需要被变换的区域的四个角点
points1 = np.float32([[174,143], # 左上角点[623,37], # 右上角点[90,492], # 左下角点[656,550] # 右下角点
])# 计算包围points1的最小外接矩形的四个角点
points2 = np.float32([[min(points1[:,0]),min(points1[:,1])], # 左上角点[max(points1[:,0]),min(points1[:,1])], # 右上角点[min(points1[:,0]),max(points1[:,1])], # 左下角点[max(points1[:,0]),max(points1[:,1])] # 右下角点
])# 使用getPerspectiveTransform函数计算透视变换矩阵M
M = cv2.getPerspectiveTransform(points1, points2)# 使用warpPerspective函数对图片进行透视变换
dst = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))# 计算变换后图片的最小外接矩形的坐标
min_x, min_y = points2.min(axis=0).astype(int)
max_x, max_y = points2.max(axis=0).astype(int)# 根据最小外接矩形的坐标裁剪变换后的图片
cropped_dst = dst[min_y:max_y, min_x:max_x]# 显示原始图片
cv2.imshow('img', img)# 显示裁剪后的变换图片
cv2.imshow('cropped_dst', cropped_dst)# 等待按键,0表示无限等待直到有按键按下
cv2.waitKey(0)
5、请编写一段Python代码,使用OpenCV库对一张图像进行以下处理:
- 将图像转换为灰度图。
- 使用高斯滤波器平滑图像,内核大小为5x5,标准差为1。
- 使用Canny边缘检测算法检测图像边缘,阈值1为50,阈值2为150。
- 在检测到的边缘图像上绘制轮廓,轮廓颜色为红色,厚度为2。
import cv2# 读取图片文件
img = cv2.imread("./picture.png")# 调整图片大小,便于处理和显示
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)# 将图片转换为灰度图,便于后续的二值化处理
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 使用Otsu's thresholding方法对灰度图进行二值化处理
ret,img_binary = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 对二值化的图片进行高斯模糊处理,减少噪声
img_blur = cv2.GaussianBlur(img_binary,(5,5),1)# 使用Canny算法对模糊处理后的图片进行边缘检测
img_canny = cv2.Canny(img_blur,50,150)# 找到边缘检测后的图片中的轮廓
contours, _ = cv2.findContours(img_canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)# 复制原图
img_copy = img.copy()
# 在复制的图片上绘制找到的轮廓
img_draw = cv2.drawContours(img_copy,contours,-1,(0,0,255),2)# 显示二值化后的图片
cv2.imshow("img_binary",img_binary)
# 显示经过高斯模糊处理后的图片
cv2.imshow("img_blur",img_blur)
# 显示边缘检测后的图片
cv2.imshow("img_canny",img_canny)
# 显示绘制了轮廓的图片
cv2.imshow("img_draw",img_draw)# 等待用户按键,任意键按下后关闭所有图片窗口
cv2.waitKey(0)
6、你正在开发一个自动驾驶系统,需要识别交通信号灯的颜色(红、黄、绿)。请设计一个简化的流程,说明如何使用OpenCV来识别交通信号灯的颜色。
- 读取包含交通信号灯的图像。
- 转换图像到HSV颜色空间。
- 分别为红、黄、绿三种颜色定义HSV范围,并创建三个掩膜。
- 对每个掩膜进行轮廓检测,识别出可能的信号灯区域。
import cv2
import numpy as np# 加载图像
img = cv2.imread('./demo111.png')# 转换到 HSV 色彩空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 红色范围
red_min1 = np.array([0, 43, 46])
red_max1 = np.array([10, 255, 255])
red_min2 = np.array([156, 43, 46])
red_max2 = np.array([180, 255, 255])# 黄色范围
yellow_min = np.array([26, 43, 46])
yellow_max = np.array([34, 255, 255])# 绿色范围
green_min = np.array([35, 43, 46])
green_max = np.array([77, 255, 255])# 创建各个颜色的掩码
img_mask1 = cv2.inRange(img_hsv, red_min1, red_max1)
img_mask2 = cv2.inRange(img_hsv, red_min2, red_max2)# 合并红色区域的掩码
img_mask11 = cv2.bitwise_or(img_mask1, img_mask2)# 黄色区域掩码
img_mask22 = cv2.inRange(img_hsv, yellow_min, yellow_max)# 绿色区域掩码
img_mask33 = cv2.inRange(img_hsv, green_min, green_max)# 合并所有颜色区域的掩码
mask_all = cv2.bitwise_or(cv2.bitwise_or(img_mask11, img_mask22), img_mask33)# 查找轮廓
contours, _ = cv2.findContours(mask_all, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 创建图像副本进行绘制
img_copy = img.copy()# 绘制每个轮廓的矩形框
for i in contours:if cv2.contourArea(i) < 2000:continue(x, y), radius = cv2.minEnclosingCircle(i)(x, y, radius) = np.int32((x, y, radius))# 画圆cv2.circle(img_copy, (x, y), radius, (255, 0, 255), 3)# 显示原图、掩码图和绘制矩形后的图像
cv2.imshow('img', img)
cv2.imshow('mask_all', mask_all)
cv2.imshow('img_copy', img_copy)
cv2.waitKey(0)
cv2.destroyAllWindows()
7、在一家生产彩色玩具的工厂中,需要检测产品是否按照正确的颜色进行生产。请设计一个使用OpenCV的自动化检测系统,该系统能够识别并报告不符合颜色标准的产品。
- 设定产品的标准颜色范围(HSV值)。
- 使用摄像头或图像文件获取待检测产品的图像。
- 转换图像到HSV颜色空间。
- 为每种标准颜色创建掩膜,并与产品图像进行比对。
- 识别出颜色不符合标准的产品,并记录或报告。
import cv2
import numpy as np# 读取图像并调整大小
image = cv2.imread('./duck.png') # 读取指定路径的图像
image = cv2.resize(image, (600, 600)) # 将图像调整为600x600像素# 将BGR图像转换为HSV图像
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # OpenCV默认读取图像为BGR格式,转换为HSV格式,便于颜色范围的筛选# 定义橡皮鸭的标准颜色范围(HSV值)
# 每种颜色都包含了其对应的最小和最大HSV值范围,以及用于绘制矩形的颜色
colors = {'red': {'min': np.array([0, 100, 100]), 'max': np.array([10, 255, 255]), 'color': (0, 0, 255)},'blue': {'min': np.array([70, 50, 50]), 'max': np.array([130, 255, 255]), 'color': (255, 0, 0)},'green': {'min': np.array([50, 100, 100]), 'max': np.array([70, 255, 255]), 'color': (0, 255, 0)},'pink': {'min': np.array([140, 50, 50]), 'max': np.array([180, 255, 255]), 'color': (255, 0, 255)},'black': {'min': np.array([0, 0, 0]), 'max': np.array([180, 255, 46]), 'color': (0, 0, 0)},
}# 遍历每种颜色,检测图像中的相应区域
for color_name, color_range in colors.items():# 使用inRange函数根据HSV值范围生成掩膜,提取出符合范围的颜色区域mask = cv2.inRange(hsv, color_range['min'], color_range['max'])# 使用findContours检测掩膜中的轮廓contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历检测到的轮廓# 遍历所有轮廓,筛选出面积符合要求的轮廓并绘制for cnt in contours:if cv2.contourArea(cnt) < 600 or cv2.contourArea(cnt) > 20000000:continueM = cv2.moments(cnt)cX = int(M['m10'] / M['m00'])cY = int(M['m01'] / M['m00'])cv2.drawContours(image, [cnt], 0, (0, 0, 255), 2)cv2.putText(image, 'Unqualified', (cX, cY), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color_range['color'], 2)# 显示处理后的图像,包含标记出的颜色区域
cv2.imshow('Color Detection', image)
cv2.waitKey(0) # 等待按键输入后关闭图像窗口
8、图像预处理与特征提取
- 将图像转换为灰度图
- 对灰度图进行二值化处理
- 使用形态学变换去除噪声【开运算】
- 检测图像中的边缘
- 查找并绘制图像中的轮廓
- 逐一遍历轮廓,输出所有四边形的周长 和 面积。
import cv2
import numpy as np# 读取图像
img = cv2.imread('./03.png')
# 调整图像大小
img = cv2.resize(img, (0, 0), fx=1.5, fy=1.5)
# 创建图像副本,用于后续绘制轮廓和标签
img_copy = img.copy()# 使用高斯模糊处理图像,减少噪声
img_blur = cv2.GaussianBlur(img, (3, 3), 1)# 将模糊图像转换为灰度图像
img_gray = cv2.cvtColor(img_blur, cv2.COLOR_BGR2GRAY)# 使用Otsu's thresholding方法进行二值化处理,得到二值图像
_, img_binary = cv2.threshold(img_gray, 175, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 查找二值图像中的轮廓
contours, h = cv2.findContours(img_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历所有轮廓
for cnt in contours:# 计算轮廓的矩M = cv2.moments(cnt)# 如果轮廓的面积为0,则跳过if int(M['m00']) == 0:continue# 计算轮廓的周长arc_len = cv2.arcLength(cnt, True)# 计算轮廓的面积area = cv2.contourArea(cnt)# 近似轮廓approx = cv2.approxPolyDP(cnt, float(0.04) * arc_len, True)# 计算轮廓的中心cX = int(M['m10'] / M['m00'])cY = int(M['m01'] / M['m00'])# 根据近似轮廓的点数判断形状if len(approx) == 4:# 在轮廓中显示周长和面积cv2.putText(img_copy, 'Perimeter: ' + str(round(arc_len, 2)) + ' Area: ' + str(round(area, 2)), (cX, cY), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1)# 绘制轮廓cv2.drawContours(img_copy, [cnt], -1, (0, 255, 0), 2)# 显示绘制了轮廓和标签的图像
cv2.imshow('img_copy', img_copy)
# 等待按键按下
cv2.waitKey(0)
9、假设你正在开发一个车牌识别系统,首先需要从图像中识别出车牌区域。请描述并编写代码实现以下步骤:
- 读取一张包含车牌的图像。
- 将图像转换为灰度图以简化处理。
- 使用高斯滤波器平滑图像,减少噪声干扰。
- 应用Canny边缘检测算法检测图像中的边缘。
- 查找图像中的轮廓。
- 逐一遍历轮廓。
- 设定一个面积双阈值,只保留面积在该阈值的轮廓。
- 计算这些轮廓的长宽比,长宽比ratio在2到5.5之间的,在原图上用矩形框标出,这些轮廓可能是车牌的候选区域。
import cv2# 读取图片文件
img= cv2.imread('./OIP-C.jpg')# 对图片进行缩放,这里缩小到原图的一半
img = cv2.resize(img,(0,0),fx=0.7,fy=0.7)# 复制原图
img_copy = img.copy()# 将图片转换为灰度图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 使用高斯滤波器进行平滑处理
img_gray = cv2.GaussianBlur(img_gray,(5,5),0)# 应用Canny边缘检测算法检测图像中的边缘。
img_canny = cv2.Canny(img_gray,50,150)# 找到轮廓
contours, hierarchy = cv2.findContours(img_canny,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)# 遍历所有轮廓
for i in contours:# 筛选轮廓面积在10000到15000之间的轮廓if 10000 < cv2.contourArea(i) < 15000:x,y,w,h = cv2.boundingRect(i)ratio = float(w)/h# 筛选长宽比在2到5.5之间的矩形if 2 < ratio < 5.5:# 画矩形cv2.rectangle(img_copy,cv2.boundingRect(i),(0,255,0))# 显示原图
cv2.imshow('img',img)
# 显示绘制了轮廓的图片
cv2.imshow('img_draw',img_copy)
# 等待按键按下
cv2.waitKey(0)
相关文章:
OpenCV的简单练习
1、读取一张彩色图像并将其转换为灰度图。 import matplotlib.pyplot as pltimg plt.imread("./flower.png") # 灰度化 img_gray img[:,:,0]*0.299 img[:,:,1]*0.587 img[:,:,2]*0.114plt.subplot(121) plt.imshow(img) plt.subplot(122) plt.imshow(img_gray,c…...
VS2019中无法跳转定义_其中之一情况
我习惯了使用VS2019看stm的代码; 遇到的问题,在导入代码后,发现有些函数调用不能跳转到定义; 问题描述步骤 1、导入代码 2、跳转,无法跳转 1、中文路径 2、删除.vs文件 和网上查的都没办法解决 最后发现是VS不支持 …...
虚幻5描边轮廓材质
很多游戏内都有这种描边效果,挺实用也挺好看的,简单复刻一下 效果演示: Linethickness可以控制轮廓线条的粗细 这样连完,然后放到网格体细节的覆层材质上即可 可以自己更改粗细大小和颜色...
【C语言】多线程服务器
多线程服务器 多线程服务器步骤代码 多线程服务器 步骤 主线程创建子线程,用子线程和客户端通信。 步骤: 1.使用socket函数,获取一个socket文件描述符 2.使用setsockopt端口复用 3.使用bind函数允许客户端的哪些ip可以访问服务器 4.使用lis…...
跨平台轻量级RTSP技术设计和使用场景探讨
设计背景 跨平台内网超低延迟直播的创新引擎 为满足安防视频监控、教育培训、工业生产、医疗健康、智能物联网等内网超低延迟需求,避免让用户配置单独的服务器,大牛直播SDK在推送端发布了跨平台(Windows|Linux(含x86_64|aarch64…...
分解质因数
题目描述 给定 n个正整数a,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入格式 第一行包含整数 n。 接下来 n行,每行包含一个正整数 a。 输出格式 对于每个正整数 aiai,按照从小到大的顺…...
wordpress建站--如何用Let‘s Encrypt给网站添加免费ssl证书,支持https访问
本文首发网站:https://www.click234.com 默认情况下我们的网站是http访问,为了增加访问安全性,我们需要添加ssl证书,支持采用https方式访问,今天我们来看下怎么创建免费的ssl证书--Lets Encrypt 使用 Certbot 自动化工…...
web实操7——ServletContext
概念 和服务器通信 功能 解释说明: mime:互联网中一种文件的类型,可以用servletContext对象来获取。 域对象:用来共享数据,里面有一些get,set,removeAttribute,只要搞清楚ServletContext对象的域的范围是什么 如何…...
Android中bindService和startService启动服务有何区别
Android中bindService和startService启动服务有何区别 bindService 和 startService 是 Android 中两种用于与 Service 交互的方式,它们的区别主要在于 生命周期管理 和 使用场景。以下是详细对比: 1. bindService方式 bindService 是一种绑定方式&am…...
Jupyter Notebook 切换虚拟环境
方法 切换到需要添加到Jupyter Notebook中的虚拟环境,执行: python -m ipykernel install --name Jupyter Notebook中显示的虚拟环境名称如果遇到 [Errno 13] Permission denied: /usr/local/share/jupyter类似的权限问题,可能是没有对应的…...
短波红外相机
短波红外相机搭载采用 SenSWIR 技术的 Sony 高灵敏度传感器,能捕获到400nm~1700nm范围的可见光-短波红外宽波段图像信息,该相机可替代传统的“可见光相机短波红外相机”双相机检测方案,降低系统成本、提高处理速度、扩大检测范围,…...
余弦相似度Cosine Sim
what 余弦相似度是一种用于度量向量相似性的metric。 c o s θ A . B ∣ A ∣ . ∣ B ∣ cos\theta \frac{A.B}{|A|.|B|} cosθ∣A∣.∣B∣A.B A.B:向量的内积|A|:向量的模长 c o s θ cos\theta cosθ:的范围$ [ -1 , 1 ] $ why 余弦…...
【从零开始的LeetCode-算法】1338. 数组大小减半
给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1: 输入:arr [3,3,3,3,5,5,5,2,2,7] 输出:2 解释:选择 {3,7…...
测试工程师八股文05|功能测试、业务测试
一、基础概念 1、软件测试分类 1️⃣按照软件产生的阶段划分 单元测试:针对程序源代码进行测试【开发自测】集成测试:针对模块之间功能交互进行测试系统测试:对整个系统(功能、非功能)进行全面测试验收测试ÿ…...
【电源专题】开关转换器使能(EN)和欠压锁定(UVLO)为什么需要回滞?
在文章:【电源专题】案例:芯片规格书使能定义高电平最小阈值1.4V,那真的是到1.4V时才开始输出?_芯片的电流阀值-CSDN博客中我们提到一般来说开关转换器的使能脚是有一个回滞的,比如下图所示的芯片规格书...
TS的类型守卫、类型约束实践
类型守卫 // 基础类型判断 const arr [30, 50] console.log(typeof arr) // object const set new Set(arr) console.log(typeof set) // object const map new Map() console.log(typeof map) // objectclass Customer {constructor() {}buy(method:string) {console.log(…...
Thread线程基础使用
多线程目的:其实就是希望“并行”执行多任务,提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…...
番外篇 | BGF-YOLO:引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8检测性能
前言:Hello大家好,我是小哥谈。本文提出了一种名为BGF-YOLO的新模型,通过引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8在脑肿瘤检测中的性能,采用多层特征融合与动态稀疏注意机制以减少特征冗余。 🌈 目录 🚀1.基础概念 🚀2.网络结构 �…...
15-从 TypeScript 到 ArkTS 的适配规则(5)
15-从 TypeScript 到 ArkTS 的适配规则(5) 不支持确定赋值断言 **规则:**arkts-no-definite-assignment 级别:警告 ArkTS不支持确定赋值断言,例如:let v!: T。改为在声明变量的同时为变量赋值。 TypeS…...
UniApp配置使用原子化tailwindcss
参考视频 创建项目 新建项目选择uniapp - vue版本这里我选择3 - 点击创建即可 创建完成后,如果是要编译到小程序的项目则可以先将项目运行到小程序打开了 初始化package.json 执行 npm init -y安装和配置 安装 npm i -D tailwindcss postcss autoprefixer # 安…...
魅族手机刷官方系统
从魅族官网下载固件 https://flyme.cn/firmware.html 找到自己的型号,里面有历史版本、最新版,按照需求下载。 下载的是update.zip,改名就不能升级了 方法1 直接点击下载的update.zip包就可以升级。 方法2 将文件移动到文件管理的根目录&a…...
【欧几里得算法以及扩展欧几里得算法】
欧几里得算法 假设有两个非负整数 a , b a,b a,b,并且 a , b a,b a,b都不等于0,那么 a , b a,b a,b的最大公约数等于其中较小的数和 a , b a,b a,b相除的余数的最大公约数。 用公式表达为 g c d ( a , b ) g c d ( b , a ( m o d b ) ) gcd(a,b)gcd(b,a\pmod{b})…...
CentOS7 Apache安装踩坑
Gnome桌面右键弹出终端。 [rootlocalhost ~]# yum repolist 已加载插件:fastestmirror, langpacks /var/run/yum.pid 已被锁定,PID 为 2611 的另一个程序正在运行。 Another app is currently holding the yum lock; waiting for it to exit... [root…...
c#基于tcp的打印机共享程序可以打印图片
c sharp 基于tcp共享图片打印程序: 基于c#的tcp打印服务程序https://gitee.com/paoxi/tcpprint代码已经开源 执行文件在下方 tcp打印发送端 庖犠/c sharp 基于tcp共享图片打印程序 - Gitee.comhttps://gitee.com/paoxi/tcpprint/releases/tag/0.9...
二分查找算法
目录 1.二分查找 2.在排序数组中查找元素的第一个和最后一个位置 2.1题目解析 2.2算法原理 2.3编写代码 3.x的平方根 3.1题目解析 3.2算法原理 3.3编写代码 4.搜索插入位置 4.1题目解析 4.2算法原理 4.3编写代码 5.山脉数组的峰顶索引 5.1题目解析 5.2算法原理 …...
【Python技术】同花顺wencai涨停分析基础上增加连板分析
周末,有读者加我, 说 之前的涨停分析 是否可以增加连板分析。 这个可以加上。 先看效果 这里附上完整代码: import streamlit as st import pywencai import pandas as pd from datetime import datetime, timedelta import plotly.graph_o…...
多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数
(40)用 thread 类 或全局 async (…) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数? 弄清楚这个问题,有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async (…࿰…...
mp4影像和m4a音频无损合成视频方法
第一步:复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步:下载-影像.mp4和-音频.m4a 第四步:合并视频; 使用ffmpeg进行无损合成(如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…...
CEF 数据加密与网络安全
随着网络攻击的日益猖獗,确保应用的安全性已经成为开发者的首要任务。特别是在现代Web应用中,如何确保数据的加密存储、网络通信的安全性以及有效的认证机制成为至关重要的问题。对于基于 Chromium Embedded Framework (CEF) 的应用,开发者必…...
【Linux学习】十五、Linux/CentOS 7 用户和组管理
Linux下组和用户的管理都必须是root用户下进行: 一、组的管理 1.组的创建 格式: groupadd 组名参数: -g:指定用户组的组ID(GID),如果不提供则由系统自动分配。 【案例】创建一个名为 oldg…...
C语言实现图片文件的复制
在C语言中,直接处理图片文件(如JPEG、PNG等)的复制,通常涉及到文件I/O操作。这些图片文件是二进制文件,因此需要使用二进制模式读取和写入文件。 图片文件复制代码: #include <stdio.h> #include&l…...
噪杂环境(房车改装市场)离线语音通断器模块
一直在坚持,却很难有机会上热门,在现在这个以流量为导向的时代,貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主,应用场景主要是房车改装,根据九客户的需求定制化一些模块。因为没有…...
网络安全知识点
第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…...
QT<32>软件子页面最小化后再次点击置顶显示
一、前言 在 Qt 中,当一个窗口被最小化后,再次点击恢复它时,默认情况下,窗口恢复的方式可能并不总是显示在最顶层。这通常是因为窗口恢复后会被置于操作系统的默认层次结构中,而不是直接处于最上层。为了确保恢复后的窗…...
TCP 数据传输的拆包和粘包了解吗?
前言: 上一篇我们了解了什么是 TCP 协议,以及 TCP 协议 3 次握手 4次挥手的原因,本篇来分享一下 TCP 数据的传输过程的拆包和粘包,以及 TCP 数据传输过程中的一些细节。 计算机网络往期文章 TCP 为什么是 3 次握手 4 次挥手&am…...
Ubuntu常用自救方案
一、开机进入终端界面 莫名其妙进入终端界面了且死活出不来,原因可能是下载了些不该下的,或者卸载了些不能卸的。 万一真是这样可以尝试以下方法: 1.安装图形界面 第一行必安,2、3没试过 sudo apt-get install ubuntu-desktop …...
决策曲线分析(DCA)中平均净阈值用于评价模型算法(R自定义函数)
决策曲线分析(DCA)中平均净阈值用于评价模型算法 DCA分析虽然不强调用来评价模型算法或者变量组合的优劣,但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性,其实这种一致性也可以找到内在的联系,比如…...
【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期
🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第二期3【小沐…...
回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测
回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效…...
深度解析相对路径、绝对路径与URL映射策略、MVC架构
一、相对路径与绝对路径的概念与应用 路径管理是Web开发中的核心概念之一。理解不同类型的路径如何影响文件和资源的访问对于确保代码的灵活性、可维护性和可移植性至关重要。 1. 相对路径 相对路径是指相对于当前文件或目录的位置来指定目标资源的路径。它不依赖于绝对的服…...
clipboard----封装复制组件
Clipboard.js 是一个轻量级的 JavaScript 库,旨在帮助开发者轻松地实现将文本复制到剪贴板的功能。它不依赖 Flash 或其他外部库,并且提供了一种简单的方式来响应用户的复制行为。Clipboard.js 支持绑定到任何元素(如按钮、图片等)…...
vue 中数据改变后,组件不更新
vue 中数据改变后,组件不更新 1.1. 确认响应式 1.2. 使用计算属性或侦听器 1.3. 检查异步更新队列 1.4. 手动触发更新 1.5. 检查数据绑定 1.6. 避免直接修改数组 1.7. 使用 Vue.set 或 this.$set 1.8. 检查作用域问题 1.9. 使用 Vue DevTools vue 中数据改变后&…...
使用C#和OPenCV实现圆形检测
文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能…...
C++ 给定字符串,然后给出开始要取的位置,返回取到的信息
3 happy new year 7 year 1 new 4 new year year error input #include <stdio.h> #include <string.h> void strmcpy(char* s, char* t, int m); int main() {int repeat, m;char t[1000], s[1000];scanf("%d", &repeat);getchar(); //吸收换行符in…...
异步持久化策略对比
1.背景 游戏服务器其中一项重点工作,就是对游戏玩家的数据进行持久化,保证下次登录可以再续前缘。如果游戏服务器架构里没有缓存,每次操作都需要读写数据库,无疑对数据库带来非常大的压力。一旦使用缓存,就伴随异常持…...
手机租赁系统开发全流程解析与实用指南
内容概要 在如今快速发展的科技时代,手机租赁系统已经成为一种新兴的商业模式,非常符合当下市场需求。那么,在开发这样一个系统的时候,首先要从需求分析和市场调研开始。在这一阶段,你需要了解用户需要什么࿰…...
apache-dubbo
dubbo 文档地址 dubbo 官方文档地址 https://dubbo.apache.org/zh-cn/docs/user/references/api.html nacos 官方文档地址 https://nacos.io/zh-cn/docs/quick-start.html nacos下载地址 https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.…...
【JavaEE】网络(1)
🐵本篇文章开始讲解计算机网络相关的知识 一、基础概念 1.1 局域网和广域网 局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能…...
系统思考—决策
今年在为不同公司交付培训与项目时,常常听到“降本增效”的提法,但关键是:“降”的到底是什么成本?裁员无疑是最快的成本削减方式,但也可能带来人心惶惶。人力是资本,不是成本。除非企业到了生死存亡的关头…...
nVisual 前端集成SDK使用说明
目前客户需要搭建自己的可视化产品,但需要使用nVisual的可视化视图功能,根据目前项目实施需求,决定做了一款简单版的SDK视图插件,这个小插件的主要功能是嵌入到客户项目里给客户提供 ‘详细视图’‘拓扑视图’或者是‘主视图’的展示功能.目前已经开发完毕,这里做一下简单介绍.…...