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

OpenCV图像形态学:原理、操作与应用详解

 一、引言

      图像形态学(Image Morphology)是图像处理领域的一个重要分支,它基于集合论、格论、拓扑学和随机函数理论,主要用于分析和处理图像的几何结构。形态学操作通过特定的结构元素(Structuring Element)与图像进行相互作用,从而提取图像中有用的形状特征。

     OpenCV中提供了完整的形态学操作实现,包括基本的膨胀、腐蚀操作,以及由它们组合而来的开运算、闭运算等高级操作。

二、概念

2.1 结构元素(Structuring Element)

        结构元素是形态学操作的核心,可以看作是一个小的矩阵或模板,通常比处理的图像小得多。常见的结构元素形状有:

- 矩形(MORPH_RECT)
- 十字形(MORPH_CROSS)
- 椭圆形(MORPH_ELLIPSE)

在OpenCV中,我们可以使用cv2.getStructuringElement()函数来创建结构元素:


import cv2
import numpy as np# 创建3x3矩形结构元素
kernel_rect = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
print("矩形结构元素:\n", kernel_rect)# 创建5x5十字形结构元素
kernel_cross = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))
print("十字形结构元素:\n", kernel_cross)# 创建7x7椭圆形结构元素
kernel_ellipse = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
print("椭圆形结构元素:\n", kernel_ellipse)

2.2 二值图像与灰度图像

形态学操作可以应用于二值图像和灰度图像:

- 二值图像:像素值只有0和1(或0和255),形态学操作更直观
- 灰度图像:形态学操作基于像素的灰度值进行

三、基本形态学操作

 3.1 腐蚀(Erosion)

       腐蚀操作可以看作是"收缩"或"细化"二值图像中的前景物体。基本原理是将结构元素在图像上滑动,只有当结构元素完全覆盖前景像素时,中心像素才会保留为前景。

OpenCV中使用cv2.erode()函数实现腐蚀操作:


import cv2
import numpy as np# 读取图像
image = cv2.imread('binary_image.png', 0)  # 以灰度模式读取# 定义结构元素
kernel = np.ones((5,5), np.uint8)# 腐蚀操作
erosion = cv2.erode(image, kernel, iterations=1)# 显示结果
cv2.imshow('Original', image)
cv2.imshow('Erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

应用场景
- 去除小的噪声点
- 分离连接在一起的物体
- 消除细小的突出物

3.2 膨胀(Dilation)

       膨胀操作与腐蚀相反,可以看作是"扩张"或"加粗"前景物体。只要结构元素与前景像素有重叠,中心像素就会被设置为前景。

OpenCV中使用`cv2.dilate()`函数实现膨胀操作:

import cv2
import numpy as np# 读取图像
image = cv2.imread('binary_image.png', 0)  # 以灰度模式读取# 定义结构元素
kernel = np.ones((5,5), np.uint8)# 膨胀操作
dilation = cv2.dilate(image, kernel, iterations=1)# 显示结果
cv2.imshow('Original', image)
cv2.imshow('Dilation', dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()

应用场景
- 填补前景物体中的空洞
- 连接相邻的物体
- 增加边缘尺寸

四、高级形态学操作

4.1 开运算(Opening)

开运算是先腐蚀后膨胀的过程,数学表达式为:

开运算(A) = 膨胀(腐蚀(A))
 

OpenCV中使用`cv2.morphologyEx()`函数实现开运算:

import cv2
import numpy as np# 读取图像
image = cv2.imread('binary_image.png', 0)  # 以灰度模式读取# 定义结构元素
kernel = np.ones((5,5), np.uint8)# 开运算
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)# 显示结果
cv2.imshow('Original', image)
cv2.imshow('Opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

特点与应用:
- 消除小的噪声点
- 平滑物体轮廓但不明显改变面积
- 断开狭窄的连接部分

4.2 闭运算(Closing)

闭运算是先膨胀后腐蚀的过程,数学表达式为:


闭运算(A) = 腐蚀(膨胀(A))

import cv2
import numpy as np# 读取图像
image = cv2.imread('binary_image.png', 0)  # 以灰度模式读取# 定义结构元素
kernel = np.ones((5,5), np.uint8)# 闭运算
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)# 显示结果
cv2.imshow('Original', image)
cv2.imshow('Closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

特点与应用:
- 填补前景物体中的小孔洞
- 连接邻近物体
- 平滑轮廓但不明显改变面积

4.3 形态学梯度(Morphological Gradient)

形态学梯度是膨胀图与腐蚀图之差,可以得到物体的轮廓:

import cv2
import numpy as np'''梯度运算'''
# 梯度运算:膨胀 - 腐蚀
# 作用:突出显示图像中强度变化剧烈的地方
wenzi=cv2.imread('wenzi.png')
cv2.imshow('wenzi_new',wenzi)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)#膨胀
pz_wenzi=cv2.dilate(wenzi,kernel,iterations=1)
cv2.imshow('pz_wenzi',pz_wenzi)
cv2.waitKey(0)#腐蚀
fs_wenzi=cv2.erode(wenzi,kernel,iterations=1)
cv2.imshow('fs_wenzi',fs_wenzi)
cv2.waitKey(0)#膨胀-腐蚀
bianyuan=cv2.morphologyEx(wenzi,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('bianyuan',bianyuan)
cv2.waitKey(0)
cv2.destroyAllWindows()

应用场景:
- 边缘检测
- 物体轮廓提取

4.4 顶帽与黑帽运算

import cv2
import numpy as np
'''顶帽与黑帽'''
# 顶帽和黑帽# 顶帽 = 厡始图像 - 开运算结果(先腐蚀后膨胀)
# 作用:提取比背景亮的小区域,提取亮细节,如文本、亮斑等# 黑帽 = 闭运算(先膨胀后腐蚀)- 原始图像
# 作用:提取比背景暗的小区域,提取暗细节,如阴影、暗斑等。sun=cv2.imread('sun.png')
cv2.imshow('sun_yuan',sun)
cv2.waitKey(0)
kernel=np.ones((2,2),np.uint8)#开运算
open_sun=cv2.morphologyEx(sun,cv2.MORPH_OPEN,kernel)
cv2.imshow('open_sun',open_sun)
cv2.waitKey(0)
#顶帽
tophat=cv2.morphologyEx(sun,cv2.MORPH_TOPHAT,kernel)cv2.imshow('tophat',tophat)
cv2.waitKey(0)#闭运算
close_sun=cv2.morphologyEx(sun,cv2.MORPH_CLOSE,kernel)
cv2.imshow('close_sun',close_sun)
cv2.waitKey(0)
#黑帽
blackhat=cv2.morphologyEx(sun,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('blackhat',blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

应用场景:
- 顶帽:提取比结构元素小的亮区域
- 黑帽:提取比结构元素小的暗区域
- 常用于光照不均匀的图像处理

总结

       图像形态学是计算机视觉中强大的工具,OpenCV提供了完整的实现。通过合理组合基本操作,可以解决许多实际问题:

1. 腐蚀和膨胀是形态学的基础
2. 开运算和闭运算是腐蚀和膨胀的智能组合
3. 形态学梯度、顶帽和黑帽运算提供了更多高级功能
4. 参数选择需要根据具体应用场景调整

       形态学操作虽然简单,但在图像预处理、特征提取、对象分割等方面发挥着重要作用。掌握这些技术可以大大提高图像处理任务的效果和效率。

相关文章:

OpenCV图像形态学:原理、操作与应用详解

一、引言 图像形态学(Image Morphology)是图像处理领域的一个重要分支,它基于集合论、格论、拓扑学和随机函数理论,主要用于分析和处理图像的几何结构。形态学操作通过特定的结构元素(Structuring Element)…...

ubuntu git cola gui

直接的方法, samba, win 里用 tortoiseSVN 需要先在命令行,运行 git 命令,看到操作提示, 按照提示做 然后右键看 git diff 其它的方法 linux下可视化git工具git-cola安装与使用(HTTP方式)_git…...

RTX5080 安装torch,torchvision ,torchaudio 指南

一、前置准备 5080 显卡 是sm120 架构,只有torch的preview版本可以使用,而且该版本仅支持cuda12.8. 请你放弃下载以及使用低版本cuda cudnn torch 的想法。 请你学习conda 创建环境,激活环境,在虚拟环境里使用pip ,…...

ubuntu开发mcu环境

# 编辑 vim或者vscode # 编译 arm-none-eabi # 烧写 openocd 若是默认安装,会在/usr/share/openocd/scripts/{interface,target} 有配置接口和目标版配置 示例: openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg 启动后,会…...

《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例

《UNIX网络编程卷1:套接字联网API》第5章 TCP客户/服务器程序示例 5.1 本章目标与示例程序概述 本章通过一个完整的TCP回射(Echo)客户/服务器程序,深入解析TCP套接字编程的核心流程与关键问题。示例程序的功能为:客户…...

花洒洗澡完毕并关闭后过段时间会突然滴水的原因探究

洗澡完毕后的残留水 在洗澡的过程中,我们通常会使用到大量的水。这些水会通过花洒管子到达花洒顶喷流出。由于大顶喷花洒的喷头较大,关闭后里面的存水会更多。 气压失衡后的滴水 当花洒关闭后,内部的水管和花洒头中仍存有一定量的水。由于…...

子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题

问题描述&#xff1a;最近写代码时遇到了一个问题&#xff1a;点击A弹窗后关闭&#xff0c;继续点击B弹窗&#xff0c;这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…...

TTL 值 | 在 IP 协议、ping 工具及 DNS 解析中的作用

注&#xff1a;本文为 “TTL” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 TTL 值的意义 2007-10-18 11:33:17 TTL 是 IP 协议包中的一个值&#xff0c;用于标识网络路由器是否应丢弃在网络中停留时间过长的数据包。数据包可能因多种原因在一定时间内…...

代码调试:VS调试实操

1.什么是BUG&#xff1f; BUG原意是“虫子”&#xff0c;在计算机领域是指未被发现的错误&#xff0c;又叫程序漏洞 2.什么是调试&#xff1f; 当你在写完代码时需要去找代码中的问题&#xff0c;这个过程就叫调试 我们必须承认有这个问题并且去修复问题&#xff0c;可以透…...

IGMP(Internet Group Management Protocol)与组播技术深度解析

一、组播技术核心概念 1. 组播 vs 单播/广播 传输类型目标地址网络负载典型应用场景单播单一明确IP随接收者数量线性增长网页浏览、文件下载广播全网段&#xff08;如255.255.255.255&#xff09;强制全网设备处理ARP请求、DHCP发现组播D类地址&#xff08;224.0.0.0~239.255…...

JWT(JSON Web Token)

目录 一 JWT简单介绍 二、JWT 的组成结构 1 Header&#xff08;头部&#xff09; 2 Payload&#xff08;载荷&#xff09; 三、JWT 工作原理 好文分享 session、cookie、token 详解_token session cookie-CSDN博客 一 JWT简单介绍 概念&#xff1a;是一种开放标准&#…...

深入理解多线程编程:从基础概念到实战应用

二进制信号量&#xff1a;线程同步的基础 什么是二进制信号量&#xff1f; 二进制信号量是一种特殊的信号量&#xff0c;其值只能是0或1。它是最简单的线程同步机制之一&#xff0c;常用于线程间的简单协调。 #include <semaphore.h>sem_t sem; // 声明二进制信号量 se…...

【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)

本课题为基于单片机的智能门禁系统&#xff0c;整个系统由AS608指纹识别模块&#xff0c;矩阵键盘&#xff0c;STM32F103单片机&#xff0c;OLED液晶&#xff0c;RFID识别模块&#xff0c;继电器&#xff0c;蜂鸣器等构成&#xff0c;在使用时&#xff0c;用户可以录入新的指纹…...

【MVP 和 MVVM 相比 MVC 有哪些优化点?】

MVP 和 MVVM 相比 MVC 的优化及原因 1. MVC 的痛点 在传统 MVC 模式中&#xff1a; 视图&#xff08;View&#xff09;和模型&#xff08;Model&#xff09;直接交互&#xff1a;View 可能直接监听 Model 的变化&#xff08;如观察者模式&#xff09;&#xff0c;导致耦合。…...

蓝桥云客 刷题统计

刷题统计 问题描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题&#xff1f; 输入格式 输入一行包含三个整数 a, b 和 …...

【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转

资料下载&#xff1a;待更新。。。。 先驱动起来再说&#xff0c;干中学&#xff01;&#xff01;&#xff01; 1、实现功能 STM32同时驱动4个步进电机&#xff0c;支持单独调速与正反转控制 需要资源&#xff1a;16个任意IO口1ms定时器中断 目录 资料下载&#xff1a;待更…...

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程&#xff08;持续更新&#xff09; 环境配置&#xff1a; 显存>24GBPyTorch 2.3.0Python 3.12(ubuntu22.04)CUDA 12.1autoDL服务器平台&#xff0c;&#xff08;好处&#xff1a;可以分享镜像&…...

迅为RK3568开发板驱动开发指南helloworld驱动实验-驱动的基本框架

Linux 驱动的基本框架主要由模块加载函数&#xff0c;模块卸载函数&#xff0c;模块许可证声明&#xff0c;模块参数&#xff0c;块导出符号&#xff0c;模块作者信息等几部分组成&#xff0c;其中模块参数&#xff0c;模块导出符号&#xff0c;模块作者信息是选的部分&#xf…...

Spring Boot 3.4.3 基于 JSqlParser 和 MyBatis 实现自定义数据权限

前言 在企业级应用中,数据权限控制是保证数据安全的重要环节。本文将详细介绍如何在 Spring Boot 3.4.3 项目中结合 JSqlParser 和 MyBatis 实现灵活的数据权限控制,通过动态 SQL 改写实现多租户、部门隔离等常见数据权限需求。 一、环境准备 确保开发环境满足以下要求: …...

软件工程面试题(二十三)

1、public class Test {public static void add(Integer i){int val=i.intValue(); val+=3; i=new Integer(val); } public static void main(String[] args) {Integer i=new Integer(0); add(i); System.out.println(i.intValue());...

spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结

对比详解 1. RedisTemplate 功能&#xff1a;Spring Data Redis的核心模板类&#xff0c;提供对Redis的通用操作&#xff08;如字符串、哈希、列表、集合等&#xff09;。使用场景&#xff1a;常规的Redis增删改查操作。特点&#xff1a; 支持序列化配置&#xff08;如String…...

leetcode-热题100(3)

leetcode-74-搜索二维矩阵 矩阵最后一列升序排序&#xff0c;在最后一列中查找第一个大于等于target的元素 然后在该元素所在行进行二分查找 bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int n matrixSize;int m matrixColSize[0];in…...

【大模型系列篇】大模型基建工程:使用 FastAPI 构建 SSE MCP 服务器

今天我们将使用FastAPI来构建 MCP 服务器&#xff0c;Anthropic 推出的这个MCP 协议&#xff0c;目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn&#xff0c;采用异步编程模型&#xff0c;可轻松处理高并发请求&#xff0c;尤…...

基于大模型预测风湿性心脏病二尖瓣病变的多维度诊疗研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型的原理与架构 2.2 在医疗领域的应用现状 三、术前评估与预测 3.1 患者数据收集与分析 3.1.1 临床数据收集 3.1.2 影像数据处理 3.2 大模型预测模型建立 3.2.1 数据预处理 3.…...

5.模型训练-毕设篇

vgg&#xff1a; base_model_vgg13 models.vgg13(pretrainedTrue) base_model_vgg13.classifier[-1] nn.Linear(4096, num_classes) base_model_vgg13.to(device)(b_img_rgb.to(device)).shapebase_model_vgg13 models.vgg13(pretrainedTrue) 作用&#xff1a;加载预训练的…...

[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议

第一步&#xff1a;先理解最基础的关系&#xff08;类比快递&#xff09; 假设你要给朋友寄快递&#xff1a; Wi-Fi&#xff1a;相当于“公路和卡车”&#xff0c;负责把包裹从你家运到快递站。 TCP/UDP&#xff1a;相当于“快递公司的运输规则”。 TCP&#xff1a;顺丰快递&…...

【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现

项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…...

LeetCode算法题(Go语言实现)_23

题目 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid &#xff0c;返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素&#xff08;即相等的数组&#xff09;&#xff0c;则认为二者是相等的。 一、代码实现 func equalPairs…...

Windows家庭版如何开启Hyper-V与关闭Hyper-V

在Windows中如果要安装桌面版Docker,那么Hyper-V一定是需要开启的,在专业版操作系统上,这个功能直接就可以勾选开启,重启之后就即可生效,但在家庭版的操作系统上,默认是没有这个选择项的,这时候我们就需要借助于命令去开启它。本文,整理了一键开启Hyper-V服务和一键关闭…...

C# 中充血模型和‌贫血模型

在C#中&#xff0c;‌充血模型&#xff08;Rich Domain Model&#xff09;‌和‌贫血模型&#xff08;Anemic Domain Model&#xff09;‌是两种截然不同的领域建模方式&#xff0c;核心区别在于‌业务逻辑的归属‌。以下是通俗易懂的解释&#xff1a; 1. ‌贫血模型&#xff…...

C++中的继承

#include <iostream> using namespace std;// 武器类&#xff08;基类&#xff09; class Weapon { protected:int atk; // 攻击力public:// 构造函数Weapon(int atk 0) : atk(atk) {}// 虚拟析构函数virtual ~Weapon() {}// set 和 get 接口void setAtk(int atk) {this…...

Uubuntu20.04复现SA-ConvONet步骤

项目地址&#xff1a; tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤&#xff1a; 一、系统更新 检查系统是否已经更新到最新版本&#xff1a; sudo apt-get update sudo apt-get upgra…...

Blender模型导入虚幻引擎设置

单位系统不一致 Blender默认单位是米&#xff08;Meters&#xff09;&#xff0c;而虚幻引擎默认使用**厘米&#xff08;Centimeters&#xff09;**作为单位。 当模型从Blender导出为FBX或其他格式时&#xff0c;如果没有调整单位&#xff0c;虚幻引擎会将1米&#xff08;Blen…...

大数据Spark(五十五):Spark框架及特点

文章目录 Spark框架及特点 一、Spark框架介绍 二、Spark计算框架具备以下特点 Spark框架及特点 一、Spark框架介绍 Apache Spark 是一个专为大规模数据处理而设计的快速、通用的计算引擎。最初由加州大学伯克利分校的 AMP 实验室&#xff08;Algorithms, Machines, and Pe…...

深入理解Python asyncio:从入门到实战,掌握异步编程精髓

文章目录 前言一、asyncio基础概念1.1 什么是异步编程&#xff1f;1.2 asyncio核心组件 二、asyncio核心用法详解2.1 事件循环管理2.2协程与任务2.3 异步上下文管理器 三、asyncio高级特性3.1 异步生成器3.2异步队列3.3 异步锁和信号量 四、asyncio实战项目4.1 高性能Web爬虫4.…...

线段树,单点,区间修改查阅

#PermanentNotes/algorithm 思想 首先关于树有许多类型,这里我们主要首线段树,整体思想就是将一个大区间进行拆分,拆分成各个小区间,在我们进行查找,更新时,就是对区间的查找更新 类型 初始化,构建树 代码 const int Z 1e7; const ll INF 1e18; const int maxn 1e5 10…...

音视频(二)ffmpeg编译及推流

FFmpeg 大名鼎鼎&#xff0c;就不多介绍了 1&#xff1a;环境 win11_amd64 ffpmeg download:https://git.ffmpeg.org/ffmpeg.git ffmpeg msys2 download:https://www.msys2.org/ vs2022 (c 写demo用) 用别的也行 usb2.0 摄像头&#xff08;有点老&#xff09; opencv 看上传的…...

syslog 与 Linux 内核日志系统全面解析

在 Linux 系统中&#xff0c;日志是进行系统调试、故障排查和系统安全分析的重要手段。syslog 和内核日志是 Linux 日志组成的核心组件。本文将从原理、实现、配置、常见问题分析等综合解析&#xff0c;全面解读 Linux 下的日志机制。 一、syslog 系统概述 1.1 什么是 syslog …...

SQL问题分析与诊断(8)——关键信息(2)

8.2. 关键信息 8.2.2. 警告 查询计划中&#xff0c;可能会看到出现于操作符上的小图标&#xff0c;特别是黄色或红色的感叹号。这些图标都是警告。并非每个警告都指示一个严重问题&#xff0c;但发现时请检查该图标的属性窗口&#xff0c;其将包含该警告图标的具体细节。 8.…...

HCIA/HCIP基础知识笔记汇总

HCIA/HCIP基础知识笔记汇总 ICT产业链&#xff1a; 上游&#xff1a;芯片制造、元器件生产、光纤光缆制造 中游&#xff1a;硬件组装、软件开发、网络建设维护 下游&#xff1a;电信服务、互联网服务、终端产品 VLAN端口类型&#xff1a; access &#xff1a;…...

vue3 动态路由

定义&#xff1a; 对路由的添加通常是通过 routes 选项来完成的&#xff0c;但是在某些情况下&#xff0c;你可能想在应用程序已经运行的时候添加或删除路由 1. 动态添加路由规则 场景 在应用初始化时&#xff0c;可能需要根据用户的角色或权限动态添加路由规则。 实现 im…...

《Linux内存管理:实验驱动的深度探索》大纲

《Linux内存管理&#xff1a;实验驱动的深度探索》 ——通过递进式实验与问题剖析&#xff0c;从入门到精通 第一部分&#xff1a;初探内存——基础概念与简单实验 目标&#xff1a;理解内存的基本行为&#xff0c;学会观察和提问 第1章 内存初体验&#xff1a;从"free…...

【C语言】深入理解指针(五):sizeof、strlen与数组指针的那些事儿

前言 在C语言的学习中&#xff0c;指针始终是一个让人又爱又恨的话题。它强大而灵活&#xff0c;但同时也充满了陷阱。今天&#xff0c;我们就来深入探讨一下指针相关的几个重要知识点&#xff1a;sizeof和strlen的区别&#xff0c;以及数组和指针在笔试题中的那些常见问题。希…...

CMake学习-- install 指令详细说明

目录 CMake中install命令的用法背景知识使用方法项目结构示例代码CMakeLists.txt构建和安装 详细介绍安装库和头文件安装可执行文件安装额外的文件安装目录结构使用安装的库 总结 CMake中install命令的用法 背景知识 在软件开发过程中&#xff0c;构建和安装是两个重要的环节…...

Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64

​ rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast​ 编辑配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下载相关…...

uniapp 微信小程序 使用ucharts

文章目录 前言一、组件功能概述二、代码结构分析2.1 模板结构 总结 前言 本文介绍一个基于 Vue 框架的小程序图表组件开发方案。该组件通过 uCharts 库实现折线图的绘制&#xff0c;并支持滚动、缩放、触摸提示等交互功能。文章将从代码结构、核心方法、交互实现和样式设计等方…...

空调开机启动后发出噼里啪啦的异响分析与解决

背景 当空调使用时由于制冷或制热运转时&#xff08;关机后可能也会出现&#xff09;&#xff0c;塑料件热胀冷缩引起&#xff0c;可能会出现“咔咔”的声音&#xff1b;空调冷媒在空调内管路流动时会出现轻微的“沙沙”的声音&#xff1b;也有可能是新装的空调摆风轴出现响声…...

Python爬虫第3节-会话、Cookies及代理的基本原理

目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中&#xff0c;肯定经常遇到需要登录的场景。有些…...

《自然-方法》2024年度技术:空间蛋白质组学(spatial proteomics)

李升伟 编译 《自然-方法》第21卷 2195-2196页 (2024) 解析组织空间蛋白质组的技术&#xff0c;正成为图谱级研究项目的基石。这些项目正在兑现其承诺&#xff0c;帮助人类理解健康和疾病状态下的生物复杂性。 人类天生充满探索欲。我们热爱勘测未知疆域&#xff0c;并随之绘…...

pip安装timm依赖失败

在pycharm终端给虚拟环境安装timm库失败&#xff08; pip install timm&#xff09;&#xff0c;提示你要访问 https://rustup.rs/ 来下载并安装 Rust 和 Cargo 直接不用管&#xff0c;换一条命令 pip install timm0.6.13 成功安装 简单粗暴...