当前位置: 首页 > news >正文

Opencv高级图像处理

文章目录

Opencv高级图像处理

图像坐标

在这里插入图片描述

row=height=Point.y
col=width=Point.x

二值化

import cv2  
import numpy as np  # 打开图像  
image_path = 'your_image_path.jpg'  # 图片路径  
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)  # 以灰度模式读取图像  # 检查图像是否正确读取  
if image is None:  print(f"Could not open or find the image: {image_path}")  exit(0)  # 选择二值化方法,这里使用简单的阈值法  
# 你可以调整阈值(127, 255)来得到不同的效果  
# 第一个参数是源图像,第二个参数是用于分类像素的阈值,  
# 第三个参数是赋予超过阈值的像素的新值,第四个参数是二值化的类型  
ret, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)  # 保存处理后的图像  
output_path = 'binary_image.jpg'  # 保存路径
cv2.imwrite(output_path, binary_image)

滤波

高斯滤波

blurred = cv2.GaussianBlur(image, (11, 11), 0)

中值滤波

result = cv2.medianBlur(image, 3)

开闭运算

op_open = cv2.morphologyEx(blurred_raw, cv2.MORPH_OPEN, k) # 开运算
op_close = cv2.morphologyEx(blurred_raw, cv2.MORPH_CLOSE, k) # 闭运算

检测

霍夫圆检测

函数 cv2.HoughCircles()

参数含义
image原始图像
method目前只支持cv2.HOUGH_GRADIENT
dp图像解析的反向比例。1为原始大小,2为原始大小的一半
minDist圆心之间的最小距离。过小会增加圆的误判,过大会丢失存在的圆
param1(maxval)Canny检测器的高阈值,用于检测边缘点的阈值,大于此值才被检测出来。
param2(minval)检测阶段圆心的累加器阈值(thresh)。越小的话,会增加不存在的圆;越大的话,则检测到的圆就更加接近完美的圆形,检测到圆所需要的最小边缘点数,边缘点数小于此值则舍弃。
minRadius检测的最小圆的半径
maxRadius检测的最大圆的半径
# 霍夫圆检测
circles = cv2.HoughCircles(image=raw, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=150, param2=100,minRadius=0, maxRadius=0)# 绘制检测圆
if circles is not None:print(f"检测到圆的个数:{len(circles)}")# print(f"{circles}")circles = np.round(circles[0, :]).astype("int")for (x, y, r) in circles:cv2.circle(image, (x, y), r, (0, 255, 0), 1)
else:print("未检测到圆")

边缘检测

Canny边缘检测
  • 目的:Canny边缘检测算法的目的是识别图像中的一维边缘。该算法通过多步骤过程检测图像中的边缘,包括平滑图像以减少噪声、计算图像梯度以找到潜在的边缘点、应用非极大值抑制(NMS)以获得细边缘,以及使用双阈值算法和边缘连接通过滞后阈值处理确定最终边缘。
  • 输出:Canny算法输出的是一个二值图像,其中边缘上的像素为白色(或1),其余像素为黑色(或0)。

在这里插入图片描述

edges = cv2.Canny(blurred_raw, threshold1=10, threshold2=70)
# edges 是检测之后的图像

原理:参考链接:知乎文章

findContours
  • 目的findContours函数的目的是从二值图像中提取轮廓线。轮廓可以被视为连续的点(沿着边界)组成的曲线,适用于形状分析和对象检测和识别。
  • 工作方式findContours通过追踪二值图像中的白色(或前景)部分的边缘来查找轮廓。这通常是在应用了阈值处理或边缘检测之后进行。
  • 输出:该函数返回两个主要的输出:轮廓本身(一个点的列表,这些点连续地定义了边界)和每个轮廓的层级信息(表示轮廓之间的父子关系)。
# 边缘检测
ret, thresh = cv2.threshold(src=blurred_image, thresh=60, maxval=255, type=0)
contours, hierarchy = cv2.findContours(image=thresh, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_SIMPLE)# image,单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像# 绘制边缘
image = cv2.drawContours(image=image, contours=contours, contourIdx=-1, color=(0, 255, 0), thickness=3)
区别
  • 应用场景:Canny边缘检测主要用于边缘识别,适合于图像中边缘的检测和跟踪。而findContours用于提取轮廓信息,适用于更高级的形状分析和对象识别。
  • 输出类型:Canny边缘检测输出一个二值图像,其中包含检测到的边缘。findContours则返回轮廓点的集合,这些点可以用来描述对象的形状。
  • 后续处理:Canny检测出的边缘通常用作其他图像处理操作的预处理步骤,比如轮廓提取。findContours通常是形状分析或对象识别流程中的一步,它依赖于边缘检测的结果。

简而言之,Canny边缘检测专注于识别图像中的边缘,而findContours则用于基于这些边缘或其他图像特征提取和分析轮廓。在许多实际应用中,这两个步骤经常连续使用:首先应用Canny边缘检测来找到边缘,然后使用findContours来提取这些边缘形成的轮廓。

傅里叶变换-高/低通滤波

使用傅里叶变换进行高/低通滤波。

import cv2  
import numpy as np  
from matplotlib import pyplot as plt  def fourier_filter(image_path, output_path_lowpass, output_path_highpass, d0):  # 读取图像  img = cv2.imread(image_path, 0)  # 进行傅里叶变换  dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)  dft_shift = np.fft.fftshift(dft)  # 创建低通和高通滤波器掩模  rows, cols = img.shape  crow, ccol = rows // 2, cols // 2  mask_lowpass = np.zeros((rows, cols, 2), np.uint8)  mask_highpass = np.ones((rows, cols, 2), np.uint8)  r = d0 // 2  center = [crow, ccol]  x, y = np.ogrid[:rows, :cols]  mask_area_lowpass = (x - center[0]) ** 2 + (y - center[1]) ** 2 <= r*r  mask_lowpass[mask_area_lowpass] = 1  mask_highpass[mask_area_lowpass] = 0  # 应用滤波器并进行逆DFT  fshift_lowpass = dft_shift * mask_lowpass  fshift_highpass = dft_shift * mask_highpass  f_ishift_lowpass = np.fft.ifftshift(fshift_lowpass)  f_ishift_highpass = np.fft.ifftshift(fshift_highpass)  img_back_lowpass = cv2.idft(f_ishift_lowpass)  img_back_highpass = cv2.idft(f_ishift_highpass)  img_back_lowpass = cv2.magnitude(img_back_lowpass[:, :, 0], img_back_lowpass[:, :, 1])  img_back_highpass = cv2.magnitude(img_back_highpass[:, :, 0], img_back_highpass[:, :, 1])  # 归一化到0-255并保存结果  img_back_lowpass = cv2.normalize(img_back_lowpass, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)  img_back_highpass = cv2.normalize(img_back_highpass, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)  # 保存图像  cv2.imwrite(output_path_lowpass, img_back_lowpass)  cv2.imwrite(output_path_highpass, img_back_highpass)  # 显示图像(可选)  plt.subplot(131), plt.imshow(img, cmap='gray'), plt.title('Input Image')  plt.subplot(132), plt.imshow(img_back_lowpass, cmap='gray'), plt.title('Lowpass Filter')  plt.subplot(133), plt.imshow(img_back_highpass, cmap='gray'), plt.title('Highpass Filter')  plt.show()  # 使用示例:  
image_path = 'path_to_your_image.jpg'  # 请替换为你的图像文件路径  
output_path_lowpass = 'output_lowpass.jpg'  # 低通滤波后的输出文件路径  
output_path_highpass = 'output_highpass.jpg'  # 高通滤波后的输出文件路径  
d0 = 60  # 滤波器的直径,可根据需要调整  
fourier_filter(image_path, output_path_lowpass, output_path_highpass, d0)

直线检测

# 将彩色图片灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(11, 11), 0)
# 进行Hough_line直线检测
lines = cv2.HoughLines(edges, 1, np.pi / 180, 240)
print(len(lines))
print(lines)

在这里插入图片描述

直线的绘制

# 遍历每一个r和theta
for i in range(len(lines)):r, theta = lines[i, 0, 0], lines[i, 0, 1]a = np.cos(theta)  # cos(theta)b = np.sin(theta)  # sin(theta)x0 = a * r  # rcos(theta)y0 = b * r  # rsin(theta)x1 = int(x0 + 1000 * (-b))  # rcos(theta)-1000sin(theta)y1 = int(y0 + 1000 * (a))  # rsin(theta)+1000cos(theta)x2 = int(x0 - 1000 * (-b))  # rcos(theta)+1000sin(theta)y2 = int(y0 - 1000 * (a))  # rsin(theta)-1000cos(theta)cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 1)  # 绘制直线结果

相机标定

**相机标定的主要作用和目的是为了提高机器视觉系统在三维测量和识别中的应用精度。**具体来说,相机标定可以解决以下问题:

  1. 被测平面不确定性:在实际应用中,被测平面的位置可能无法精确控制,而且镜头也不是理想的小孔模型,因此无法直接使用简单的公式计算实际距离。
  2. 镜头畸变:镜头可能存在畸变,这会影响图像的正确性,使得无法直接使用小孔成像模型来计算距离。
  3. 非理想坐标平面转换:在三维空间中,需要将任意坐标平面转换到理想坐标平面上,并对有畸变的图像进行校正,以便进行后续的尺寸和位置测量。

通过相机标定,可以确定相机的内参和外参,包括镜头的焦距、畸变参数、光轴中心坐标和像元尺寸等。这些参数是唯一确定的,当摄像机和镜头确定时。通过这些参数的转换和校正,可以实现对三维空间中任意平面上尺寸与位置的测量,从而提高机器视觉系统的测量和定位精度。

# 相机标定
retval, cameraMatrix, distCoeffs, rvecs, tvecs = cv2.calibrateCamera(objectPoints, imagePoints, imageSize)

参数

retval:标定误差

cameraMatrix: 内在相机矩阵

distCoeffs: 镜头畸变系数。

rvecs: 为 3×1 旋转向量。向量的方向指定旋转轴,向量的大小指定旋转角度。

tvecs: 3×1 平移向量。

校准因素

import cv2
import numpy as np
import globdef main():# 参数设置criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)w, h = 11, 8  # 棋盘格内角点数量(亲自数)objp = np.zeros((w * h, 3), np.float32)objp[:, :2] = np.mgrid[0:w, 0:h].T.reshape(-1, 2)# 存储角点信息objpoints = []  # 三维世界坐标imgpoints = []  # 二维图像坐标# 加载并处理图像images = glob.glob('data/d2/*.jpg')for fname in images:img = cv2.imread(fname)# img = cv2.resize(img, (768, 1024))  # 统一图像大小gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# gray = cv2.GaussianBlur(gray, (11, 11), 0)  # 滤波处理# 寻找棋盘格角点ret, corners = cv2.findChessboardCorners(gray, (w, h), None)if ret:corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)  # 亚像素级角点检测m = [c[0] for c in corners]passobjpoints.append(objp)imgpoints.append(corners)# 可视化和保存结果cv2.drawChessboardCorners(img, (w, h), corners, True)cv2.imshow('Corners Found', img)cv2.waitKey(100)# 根据需要保存图像,这里以序号命名cv2.imwrite(f"result/mm_{len(imgpoints)}.jpg", img)else:print(f"Calibration failed for image: {fname}")cv2.destroyAllWindows()# 相机标定ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, (768, 1024), None, None)# 输出标定结果print("Calibration Error:", ret)print("Intrinsic Matrix:\n", mtx)print("Distortion Coefficients:\n", dist.ravel())# 如果需要,可以保存或进一步处理旋转向量和平移向量# print("Rotation Vectors:\n", rvecs)# print("Translation Vectors:\n", tvecs)if __name__ == '__main__':main()

视频处理

视频格式

code ={"mp4":"mp4v","avi":"I420","flv":"FLV1"}cv2.VideoWriter_fourcc('I','4','2','0') 
# 这个选项是一个未压缩的YUV编码,4:2:0色度子采样。这种编码广泛兼容,但会产生大文件。文件扩展名应为.avi。cv2.VideoWriter_fourcc('P','I','M','1')
# 此选项为MPEG-1。文件扩展名应为.avi。cv2.VideoWriter_fourcc('X','V','I','D') 
# 此选项是一个相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。文件扩展名应为.avi。cv2.VideoWriter_fourcc('M','J','P','G')
# 此选项为motion-jpeg视频。文件扩展名应为.avi。cv2.VideoWriter_fourcc('X','2','6','4'):
# 这个选项是一种比较新的MPEG-4编码方式。如果你想限制结果视频的大小,这可能是最好的选择。文件扩展名应为.mp4。cv2.VideoWriter_fourcc('H','2','6','4'):
# 这个选项是传统的H264编码方式。如果你想限制结果视频的大小,这可能是很好的选择。文件扩展名应为.mp4。cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
# 此选项是另一个相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。文件扩展名应为.m4v。cv2.VideoWriter_fourcc('T','H','E','O') 
# 这个选项是Ogg Vorbis。文件扩展名应为.ogv。cv2.VideoWriter_fourcc('F','L','V','1')
# 此选项为Flash视频。文件扩展名应为.flv。

模板

摄像头处理(带参调节)

import cv2
import tracebackdef callback(value):print(value)def detect(img, k_size, min_val, max_val):return imgif __name__ == '__main__':h = BaslerCam(szSettingFile='xxx.pfs', szName='Test_use_01')cv2.namedWindow("img")cv2.resizeWindow("img", (1024, 768))cv2.createTrackbar("k_size", "img", 10, 90, callback)cv2.createTrackbar("c_minval", "img", 10, 90, callback)cv2.createTrackbar("c_maxval", "img", 10, 90, callback)base_size = 10base_minval = 10base_maxval = 10while True:b, hFrames = h.ReadFrames(1)try:if len(hFrames) == 0:continuep = hFrames[0]try:k_size = cv2.getTrackbarPos("k_size", "img")k_size = k_size if k_size % 2 == 1 else k_size + 1c_minval = cv2.getTrackbarPos("c_minval", "img")c_maxval = cv2.getTrackbarPos("c_maxval", "img")result = detect(p.copy(), (base_size + k_size, base_size + k_size), base_minval + c_minval,base_maxval + c_maxval)  # 保存结果if result is not None:cv2.imshow("img", cv2.resize(result, (1024, 768)))cv2.waitKey(1)except Exception as e:traceback.print_exc()except Exception as e:print(e)traceback.print_exc()

单图片处理(带参调节)

import cv2
import tracebackdef callback(value):print(value)def detect(img, k_size, min_val, max_val):return imgif __name__ == '__main__':img_path = "../data/result/img/1712817408432.jpg"# 读取输入图片data/resource/img/led/1711702476703.jpgimg = cv2.imread(img_path)img = cv2.resize(img, (1024, 768))cv2.namedWindow("img")cv2.resizeWindow("img", (1024, 768))cv2.createTrackbar("k_size", "img", 10, 90, callback)cv2.createTrackbar("c_minval", "img", 10, 90, callback)cv2.createTrackbar("c_maxval", "img", 10, 90, callback)base_size = 10base_minval = 10base_maxval = 10while True:try:k_size = cv2.getTrackbarPos("k_size", "img")k_size = k_size if k_size % 2 == 1 else k_size + 1c_minval = cv2.getTrackbarPos("c_minval", "img")c_maxval = cv2.getTrackbarPos("c_maxval", "img")result = detect(img.copy(), (base_size + k_size, base_size + k_size), base_minval + c_minval,base_maxval + c_maxval)# 保存结果# file_name = img_path.split("/")[-1]# print(file_name)# cv2.imwrite(f"../data/result/img/r_{file_name}", result)if result is not None:cv2.imshow("img", result)cv2.waitKey(1)except Exception as e:print(e)traceback.print_exc()

相关文章:

Opencv高级图像处理

文章目录 Opencv高级图像处理图像坐标二值化滤波高斯滤波中值滤波 开闭运算检测霍夫圆检测边缘检测Canny边缘检测findContours区别傅里叶变换-高/低通滤波 直线检测 相机标定视频处理视频格式 模板摄像头处理&#xff08;带参调节&#xff09;单图片处理&#xff08;带参调节&a…...

Linux操作系统学习:day03

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( 目录 day0317、创建删除目录创建目录删除目录 18、文件的拷贝19、mv 命令20、查看文件内容的相关命令21、给文件创建软连接或硬链接 day03 …...

快排(霍尔排序实现+前后指针实现)(递归+非递归)

前言 快排是很重要的排序&#xff0c;也是一种比较难以理解的排序&#xff0c;这里我们会用递归的方式和非递归的方式来解决&#xff0c;递归来解决是比较简单的&#xff0c;非递归来解决是有点难度的 快排也称之为霍尔排序&#xff0c;因为发明者是霍尔&#xff0c;本来是命名…...

客户端输入网址后发生的全过程解析(协议交互、缓存、渲染)

目录 1. 输入 URL 并按下回车键2. DNS 解析3. TCP 连接4. 发送 HTTP 请求5. 服务器处理请求6. 发送 HTTP 响应7. 浏览器接收响应8. 渲染网页9. 执行脚本10. 处理其他资源11. TLS/SSL 加密&#xff08;如果使用 HTTPS&#xff09;握手过程 12. 协议协商和优化 总结 1. 输入 URL …...

未来科技:Web3如何重塑物联网生态系统

随着Web3技术的崛起&#xff0c;物联网&#xff08;IoT&#xff09;的发展正迎来一场深刻的变革。本文将深入探讨Web3如何重塑物联网生态系统&#xff0c;从技术原理到应用实例&#xff0c;全面解析其对未来科技发展的影响和潜力。 1. Web3技术简介与发展背景 Web3技术是建立在…...

C++之模板(二)

1、类模板 2、使用类模板 类模板在使用的时候要显示的调用是哪种类型&#xff0c;而不是像函数模板一样能够根据参数来推导出是哪种类型。 Stack.h #include <stdexcept>template <typename T> class Stack { public:explicit Stack(int maxSize);~Stack();void …...

相机的标定

文章目录 相机的标定标定步骤标定结果影响因素参数分析精度提升一、拍摄棋盘格二、提升标定精度 标定代码实现 相机的标定 双目相机的标定是确保它们能够准确聚焦和成像的关键步骤。以下是详细的标定步骤和可能的结果&#xff0c;同时考虑了不同光照条件和镜头光圈大小等因素对…...

C# 利用XejeN框架源码,编写一个在 Winform 界面上的语法高亮的编辑器,使用 Monaco 编辑器

析锦基于Monaco技术实现的Winform语法高亮编辑器 winform中&#xff0c;我们有时需要高亮显示基于某种语言的语法编辑器。 目前比较强大且UI现代化的&#xff0c;无疑是宇宙最强IDE的兄弟&#xff1a;VS Code。 类似 VS Code 的体验&#xff0c;可以考虑使用 Monaco Editor&a…...

03- jQuery事件处理和动画效果

1. jQuery的事件处理 1.1 绑定事件处理函数 on() 将一个或多个事件的处理方法绑定到被选择的元素上。on()方法适用于当前或未来的元素&#xff0c;如用脚本创建的新元素。 $(selector).on(event,childSelector,data,function) 参数描述event必需。规定要从被选元素添加的一…...

RabbitMQ 入门

目录 一&#xff1a;什么是MQ 二&#xff1a;安装RabbitMQ 三&#xff1a;在Java中如何实现MQ的使用 RabbitMQ的五种消息模型 1.基本消息队列&#xff08;BasicQueue&#xff09; 2.工作消息队列&#xff08;WorkQueue&#xff09; 3. 发布订阅&#xff08;Publish、S…...

物联网协议应用

目录 前言一、WIFI简介二、NTP协议2.1 NTP简介2.2 NTP实现 三、HTTP协议3.1 HTTP协议简介3.2 HTTP服务器 四、MQTT协议4.1 MQTT协议简介4.1.1 MQTT通信模型4.1.2 MQTT协议实现原理4.1.3 MQTT 控制报文 4.2 移植MQTT协议 前言 本文主要介绍一下物联网协议如NTP协议、HTTP协议和M…...

十分钟学会微调大语言模型

有同学给我留言说想知道怎么训练自己的大语言模型&#xff0c;让它更贴合自己的业务场景。完整的大语言模型训练成本比较高昂&#xff0c;不是我们业余玩家能搞的&#xff0c;如果我们只是想在某个业务场景或者垂直的方面加强大模型的能力&#xff0c;可以进行微调训练。 本文…...

结合简单工厂和工厂方法模式:实现灵活的对象创建

前言 在软件开发过程中&#xff0c;创建对象的方式直接影响代码的灵活性和可维护性。设计模式提供了一种解决复杂问题的方法&#xff0c;其中简单工厂模式和工厂方法模式是两种常用的创建型模式。在这篇文章中&#xff0c;我们将结合这两种模式&#xff0c;通过一个实际案例&a…...

网抑云特殊版,登录即永久

前言 今天分享一款特殊版本的音乐软件&#xff0c;相信大家在听网抑云的时候会有两大烦恼&#xff0c; 一是歌曲需要开通VIP才可以收听&#xff0c;不管怎么说也是国内厂商普遍操作 但是第二种烦恼你万万想不到的是&#xff0c;开通了会员后&#xff0c;惊奇的发现&#xff…...

Kotlin 实战小记:No-Arg 引用解决 No constructor found的问题

一、问题 新的项目试用一下kotlin, 调用数据库查询数据的时候报了这个问题&#xff1a;org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.neusoft.collect.entity.cm.CmRoom matc…...

HTML(5)——列表表格

列表 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的区域。 标签&#xff1a;ul嵌套il&#xff0c;ul是无序列表&#xff0c;li是列表条目 注&#xff1a;ul标签只能包裹li标签&#xff0c;li标签可以包含任何内容 有序列表 作用&#xff1a;布局排列整齐的需…...

FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践

简介 FreeBSD、CBSD、Jail和Ubuntu&#xff0c;四者的组合方案可以说是强强联合&#xff0c;极具性价比和竞争力&#xff01;同时安装简单方便&#xff0c;整体方案非常先进。 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案…...

SpringCloud总结(springcloud alibaba)

目录 版本说明&#xff08;很重要&#xff09; springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…...

轻轻松松上手的LangChain学习说明书

本文为笔者学习LangChain时对官方文档以及一系列资料进行一些总结&#xff5e;覆盖对Langchain的核心六大模块的理解与核心使用方法&#xff0c;全文篇幅较长&#xff0c;共计50000字&#xff0c;可先码住辅助用于学习Langchain。 一、Langchain是什么&#xff1f; 如今各类AI…...

全面对比与选择指南:Milvus、PGVector、Zilliz及其他向量数据库

本文全面探讨了Milvus、PGVector、Zilliz等向量数据库的特性、性能、应用场景及选型建议&#xff0c;通过详细的对比分析&#xff0c;帮助开发者和架构师根据具体需求选择最合适的向量数据库解决方案。 文章目录 向量数据库概述向量数据库的关键功能向量数据库的扩展和选择向量…...

svm 超参数

https://www.cnblogs.com/ChevisZhang/p/12932674.html https://wenku.baidu.com/view/b8a2c73cfd4733687e21af45b307e87100f6f861.html?wkts1718332423081&bdQuerysvm%E7%9A%84%E8%B6%85%E5%8F%82%E6%95%B0 用交叉验证找到最好的参数 C 和γ 。使用 RBF 核时&#xff0c…...

001-基于Sklearn的机器学习入门:Sklearn库基本功能和标准数据集

本节将介绍Sklearn库基本功能&#xff0c;以及其自带的几个标准数据集的调用方法。本节是学习后面内容的基础&#xff0c;如果您已经对本节内容相当熟悉&#xff0c;可跳过本节内容。 1.1 Sklearn库基本功能 的 1.2 Sklearn库标准数据集 Sklearn自带许多标准数据集&#xff…...

充电学习—7、BC1.2 PD协议

BC1.2&#xff08;battery charging&#xff09;充电端口识别机制&#xff1a; SDP、CDP、DCP 1、VBUS detect&#xff1a;vbus检测 PD&#xff08;portable device&#xff0c;便携式设备&#xff09;中有个检测VBUS是否有效的电路&#xff0c;电路有个参考值&#xff0c;高…...

技术点梳理0618

ann建库&#xff0c;分布式建库&#xff0c;性能优化&#xff0c;precision recall参数优化 hnsw&#xff0c;图索引 1. build a&#xff09;确定层&#xff1a;类似跳表思路建立多层&#xff0c;对每一个插入的节点&#xff0c;random层号l&#xff0c;从图的起始点search_…...

石英砂酸洗提纯方法和工艺

石英砂酸洗提纯方法和工艺是石英砂加工中至关重要的一个环节&#xff0c;其目的是通过化学手段去除石英砂中的杂质&#xff0c;提升其纯度。以下将详细介绍石英砂酸洗提纯的方法和工艺&#xff0c;以便更好地理解和应用这一技术。 一、概述 石英砂酸洗提纯主要是利用酸液对石英…...

linux安装dgl

1.DGL官网、选择与自己cuda、python版本匹配的dgl的whl文件CUDA11.8、python10并下载 2.用pip install运行 pip install /home/u2023170749/download/dgl-2.2.0cu118-cp310-cp310-manylinux1_x86_64.whl或者直接安装https://blog.csdn.net/weixin_44017989/article/details/13…...

【SAP-ABAP】-权限批导-批量给某个角色导入事务码权限

需求&#xff1a;SAP期初上线的时候&#xff0c;业务顾问经常会遇到批量创建角色和分配角色权限的情况 岗位需求&#xff1a;一般是业务顾问定义权限&#xff0c;BASIS进行后期运维&#xff0c;今天讲两个批导功能&#xff0c;方便期初上线 主要函数&#xff1a;PRGN_READ_ROLE…...

异常处理总结

自定义异常 ​ 系统中的异常可以分为我们能预知的异常和未知的系统异常&#xff0c;对于我们能预知的异常如空值判断&#xff0c;用户名错误&#xff0c;密码错误等异常我们需要返回客户端&#xff0c;对于系统内部异常如SQL语法错误&#xff0c;参数格式转换错误等需要统一包…...

大模型日报2024-06-18

大模型日报 2024-06-18 大模型资讯 大模型产品 Olvy 3.0&#xff1a;AI加速客户反馈分析 摘要: Olvy 3.0推出AI自动监听和智能标签功能&#xff0c;通过Google Meet集成轻松提取洞察&#xff0c;贴近客户&#xff0c;激发同理心。 PlantIdentify-免费植物识别应用 摘要: PlantI…...

NumPy 双曲函数与集合操作详解

NumPy 双曲函数 NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc&#xff0c;它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值。 示例&#xff1a; import numpy as npx np.sinh(np.pi/2)print(x)示例 找到数组 arr 中所有值的双曲余弦值&#xff1a; import…...

网络营销推广策略包括哪些/免费优化网站

1、提供一个一致的面向对象的编程环境&#xff0c;无论这个代码是在本地执行还是在远程执行。2、提供一个将软件部署和版本控制冲突最小化的代码执行环境以便于应用程序的部署和升级。3、提供一个可提高代码执行安全性的代码执行环境&#xff0c;就算软件是来自第三方不可信任的…...

有哪些可以接单做任务的网站/公司做网站推广

https://build.phonegap.com/注册账号将【index.html】文件打包压缩为.zip文件后上传 3.下载安卓版本&#xff08;.apk后缀文件&#xff09;&#xff0c;发送到手机后发现文件后缀变成了不是.apk结尾&#xff0c;在手机端【文件管理】将文件后缀修改为apk后安装即可访问。...

网站链接提交/推广哪些app最挣钱

本文是根据自己的理解翻译组织了glog的manual&#xff0c;鉴于自身的理解能力和英语水平&#xff0c;可能存在谬误&#xff0c;欢迎大家指出&#xff01;英文原文见http://google-glog.googlecode.com/svn/trunk/doc/glog.html1. 概述Google glog是一个基于程序级记录日志信息…...

餐饮网站建设/提高网站排名

目录 0. 相关文章链接 1. 工具说明 2. 准备Kafka数据 3. 准备配置文件 4. 拷贝所需jar包到Spark 5. 运行导入命令 6. 查看导入结果 0. 相关文章链接 Hudi文章汇总 1. 工具说明 HoodieDeltaStreamer工具 (hudi-utilities-bundle中的一部分) 提供了从DFS或Kafka等不同来…...

广东省水利工程建设信息网站/西安网站制作建设

根据云存储的特性&#xff0c;可以在不同的产品上&#xff0c;进行应用。所以从其市场应用角度上来看&#xff0c;产品定位应分为&#xff1a;“文件云”、“应用云”、“手机云”、“开放云”等四个方向&#xff0c;以下逐个描述&#xff1a; 1.1文件云 文件云是指以提供共享…...

做课件需要的纯音乐网站/手机营销推广方案

1、情况&#xff1a;本地一切正常&#xff0c;部署到线上每当校验格式时&#xff0c;但是里面有报错信息&#xff0c;数字输入框报错红框不展示&#xff08;如果按键删除里面内容会呈现红色的0&#xff09;&#xff0c;如图&#xff1a; 2、问题代码&#xff1a; // columns …...