计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

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

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

  • 一、前言
  • 二、滤波:图像的精细化处理​
    • 2.1 滤波基础概念​
      • 2.1.1 滤波的本质​
      • 2.1.2 图像噪声来源与类型​
    • 2.2 线性滤波​
      • 2.2.1 均值滤波​
      • 2.2.2 高斯滤波​
    • 2.3 非线性滤波​
      • 2.3.1 中值滤波​
  • 三、边缘检测:图像轮廓的精准捕捉​
    • 3.1 边缘的内涵与意义​
      • 3.1.1 边缘的定义​
      • 3.1.2 边缘检测的重要性​
    • 3.2 经典边缘检测算法​
      • 3.2.1 梯度算子​
      • 3.2.2 Canny 边缘检测算法​
  • 四、形态学操作:基于形状的图像雕琢​
    • 4.1 形态学操作基础概念​
      • 4.1.1 形态学操作的基本思想​
      • 4.1.2 结构元素的选择与影响​
    • 4.2 膨胀与腐蚀​
      • 4.2.1 膨胀​
      • 4.2.2 腐蚀​
    • 4.3 开运算与闭运算​
      • 4.3.1 开运算​
      • 4.3.2 闭运算​
  • 五、总结​
  • 致读者一封信

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作,计算机视觉是人工智能领域的核心方向之一,旨在让计算机具备理解和解释视觉信息的能力。而图像处理则是计算机视觉的基石,为后续的特征提取、目标识别、图像分割等高级任务提供数据基础。滤波、边缘检测与形态学操作作为图像处理的基础环节,各自发挥着独特且关键的作用。滤波用于改善图像质量,去除噪声或增强特定特征;边缘检测聚焦于提取图像中物体的轮廓信息;形态学操作则基于图像形状对其进行优化与处理。深入理解这些基础技术,对于掌握计算机视觉的核心知识体系至关重要。

在这里插入图片描述

一、前言

        计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。


👉👉👉 🥇 点击进入计算机视觉专栏,计算机视觉(CV)是人工智能的重要分支,致力于让机器通过数字图像或视频获取、处理和分析视觉信息,并模拟人类视觉的认知能力。本专栏涵盖基础概念、技术应用、前沿研究和实战案例等方向。

👉👉👉 🥇 点击进入计算机网络技术专栏,本专栏旨在深入探讨计算机网络的核心概念、关键技术、协议标准以及最新发展趋势,帮助读者全面理解网络通信的原理与实践。

👉👉👉 🥇 点击进入网络安全知识专栏,本专栏详细介绍了网络安全入门:理解基本概念和术语,网络安全的五大核心领域:防护、检测、响应、恢复与治理,常见的网络攻击类型及防范技巧,网络安全防护层次:从物理到应用的多重保障,企业网络安全的十大挑战及解决方案等。

二、滤波:图像的精细化处理​

2.1 滤波基础概念​

2.1.1 滤波的本质​

    滤波在数学上是一种卷积运算,它通过将一个滤波器(也称为卷积核)应用于图像,对图像的像素值进行加权求和,从而改变图像的像素值分布。从信号处理的角度看,图像可视为二维信号,滤波操作能够有针对性地修改信号的频率成分。低频成分通常对应图像的平滑区域,高频成分则与图像的细节和边缘相关。通过设计不同的滤波器,可以实现去除噪声(抑制高频噪声信号)、增强边缘(突出高频信号)等多种功能。​

2.1.2 图像噪声来源与类型​

    图像噪声是影响图像质量的关键因素之一。常见的噪声来源包括图像采集设备的电子干扰(如相机传感器的热噪声)、传输过程中的信号干扰等。主要的噪声类型有:​

    高斯噪声:其概率密度函数服从高斯分布,是由于电子设备的热噪声等产生的。在图像中表现为随机分布的灰度值波动,类似 “雪花” 效果。​

    椒盐噪声:又称脉冲噪声,图像中会随机出现黑白相间的噪声点,像撒在图像上的 “椒盐”,通常是由于图像传输错误或传感器故障引起。​

2.2 线性滤波​

2.2.1 均值滤波​

    原理:均值滤波是一种简单直观的线性滤波方法。以每个像素为中心,选取一个固定大小的邻域(如 3×3、5×5 等),计算邻域内所有像素的平均值,并用该平均值替换中心像素的值。例如,对于一个 3×3 的邻域:​
在这里插入图片描述
    中心像素在这里插入图片描述经过均值滤波后的新值为在这里插入图片描述

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
# 读取图像​
image = cv2.imread('input_image.jpg')​
​
# 定义3x3均值滤波核​
kernel = np.ones((3, 3), np.float32) / 9​
​
# 进行均值滤波​
filtered_image = cv2.filter2D(image, -1, kernel)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Mean Filtered Image', filtered_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    效果与局限性:均值滤波能有效去除高斯噪声,使图像变得平滑。然而,它会模糊图像边缘,因为在计算平均值时,将边缘像素与邻域内的非边缘像素同等对待,导致边缘信息丢失。​

2.2.2 高斯滤波​

    原理:高斯滤波同样基于邻域像素的加权平均,但权重依据高斯分布确定。距离中心像素越近的像素,权重越大;距离越远,权重越小。高斯滤波核的计算公式为:​
在这里插入图片描述

    其中,σ是高斯分布的标准差,控制高斯核的平滑程度。σ越大,高斯核的范围越广,对图像的平滑效果越强。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg')​
​
# 使用OpenCV的高斯滤波函数,设置sigmaX和sigmaY​
filtered_image = cv2.GaussianBlur(image, (5, 5), 1)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Gaussian Filtered Image', filtered_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()


    优势:相比均值滤波,高斯滤波在去除噪声的同时能更好地保留图像边缘细节。这是因为其加权方式更符合图像的自然特性,对边缘附近像素的处理更合理,不会像均值滤波那样过度平滑边缘。​

2.3 非线性滤波​

2.3.1 中值滤波​

    原理:中值滤波属于非线性滤波。以每个像素为中心选取邻域,将邻域内的像素值排序,取中间值作为中心像素的新值。例如,对于邻域[3,5,1,9,7] ,排序后为[1,3,5,7,9] ,中值为 5,中心像素将被替换为 5。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg')​
​
# 使用OpenCV的中值滤波函数​
filtered_image = cv2.medianBlur(image, 5)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Median Filtered Image', filtered_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    效果特点:中值滤波对椒盐噪声有极佳的抑制效果。由于它不是基于像素值的平均,而是选取中间值,所以能有效避免噪声点对滤波结果的干扰,在去除噪声的同时很好地保留图像的边缘和细节信息,这是线性滤波难以企及的。​

三、边缘检测:图像轮廓的精准捕捉​

3.1 边缘的内涵与意义​

3.1.1 边缘的定义​

    图像中的边缘是指图像局部区域亮度变化显著的位置,即灰度值或颜色值发生急剧变化的地方。从数学角度看,边缘处的图像灰度一阶导数具有较大幅值,或者二阶导数过零。边缘包含了物体的形状、结构等重要信息,是图像理解和分析的关键特征。​

3.1.2 边缘检测的重要性​

    在计算机视觉任务中,边缘检测为后续的目标识别、图像分割、目标跟踪等提供基础。例如,在目标识别中,通过边缘检测提取物体轮廓,有助于区分不同物体;在图像分割中,依据边缘信息可以准确划分图像中的不同区域。​

3.2 经典边缘检测算法​

3.2.1 梯度算子​

    原理:梯度算子基于图像灰度的一阶导数检测边缘。常用的有 Roberts 算子、Prewitt 算子和 Sobel 算子。以 Sobel 算子为例,它通过两个 3×3 的模板对图像进行卷积运算,一个模板用于检测水平方向的边缘,另一个用于检测垂直方向的边缘。​

    水平方向模板:​
在这里插入图片描述

    垂直方向模板:​
在这里插入图片描述


    通过计算图像在水平和垂直方向的梯度值,根据一定阈值判断是否为边缘像素。梯度值越大,灰度变化越剧烈,越可能是边缘。​

代码示例(Python + OpenCV):​

import cv2import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)  # 以灰度图读取​
​
# 使用Sobel算子计算水平方向梯度​
sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)​
sobelx = np.uint8(np.absolute(sobelx))​
​
# 使用Sobel算子计算垂直方向梯度​
sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)​
sobely = np.uint8(np.absolute(sobely))​
​
# 合并水平和垂直方向梯度​
sobel_combined = cv2.bitwise_or(sobelx, sobely)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Sobel Combined', sobel_combined)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    局限性:梯度算子对噪声敏感,因为噪声也会导致图像灰度的快速变化,容易产生误检。​

3.2.2 Canny 边缘检测算法​

原理步骤:​

    高斯滤波:首先对图像进行高斯滤波,去除图像中的噪声,因为噪声可能导致错误的边缘检测。​

    计算梯度幅值和方向:使用类似 Sobel 算子的方法计算图像在各个像素点的梯度幅值和方向。​

    非极大值抑制:在得到的梯度幅值图像上,对每个像素点进行处理,只有当该像素点的梯度幅值在其梯度方向上是局部最大值时,才保留该像素点,否则将其置为 0。这一步骤细化边缘,去除因噪声或非边缘区域产生的较弱梯度响应。​

    双阈值处理和边缘连接:设置两个阈值,高阈值和低阈值。高于高阈值的像素点确定为边缘像素,低于低阈值的像素点舍弃。介于两者之间的像素点,如果与已确定为边缘的像素点相连,则保留,否则舍弃。通过这种双阈值处理和边缘连接方式,有效提取连续且准确的边缘。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
# 使用Canny边缘检测​
edges = cv2.Canny(image, 50, 150)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Canny Edges', edges)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

​    优势:Canny 边缘检测算法综合考虑了噪声抑制、边缘定位精度和边缘连续性等多方面因素,检测效果较好,在实际应用中广泛使用。​

四、形态学操作:基于形状的图像雕琢​

4.1 形态学操作基础概念​

4.1.1 形态学操作的基本思想​

    形态学操作基于图像形状进行处理,核心是使用一个结构元素(也称为核)来探测图像。通过判断结构元素能否在图像中特定位置良好放置,从而改变图像的形状和结构。结构元素的形状(如矩形、圆形、十字形等)和大小决定了形态学操作的具体效果。​

4.1.2 结构元素的选择与影响​

    不同形状和大小的结构元素对图像的处理效果差异显著。例如,矩形结构元素在水平和垂直方向上的处理较为均匀;圆形结构元素则在各方向上相对均衡;十字形结构元素对特定方向的线条等特征更为敏感。结构元素的大小决定了操作的作用范围,较大的结构元素会对图像产生更广泛、更强烈的影响,而较小的结构元素则更注重细节处理。​

4.2 膨胀与腐蚀​

4.2.1 膨胀​

    原理:膨胀是形态学操作中的基本运算,作用是扩大图像中的物体区域。对于图像中的每个像素点,如果结构元素在该像素点位置与图像有重叠部分,就将该像素点的值设为结构元素覆盖范围内的最大值(对于二值图像,即把 0 变为 1)。例如,对于简单的二值图像和 3×3 的正方形结构元素,若结构元素中心位于图像某像素点,只要结构元素覆盖区域内有一个像素值为 1,该中心像素经膨胀后就变为 1。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
# 定义3x3矩形结构元素​
kernel = np.ones((3, 3), np.uint8)​
​
# 进行膨胀操作​
dilated_image = cv2.dilate(image, kernel, iterations = 1)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Dilated Image', dilated_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    应用场景:膨胀操作可用于连接断裂的物体、填充物体内部的小孔、增强图像中的亮区域等。​

4.2.2 腐蚀​

    原理:腐蚀与膨胀相反,用于缩小图像中的物体区域。在腐蚀操作中,对于图像中的每个像素点,只有当结构元素在该像素点位置完全包含在图像的物体区域内(对于二值图像,即结构元素覆盖的所有像素值都为 1)时,才保留该像素点原来的值,否则将其设为 0(对于二值图像)。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
kernel = np.ones((3, 3), np.uint8)​
​
# 进行腐蚀操作​
eroded_image = cv2.erode(image, kernel, iterations = 1)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Eroded Image', eroded_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

    应用场景:腐蚀操作常用于去除图像中的噪声点、细化物体轮廓、减弱图像中的亮区域等。​

4.3 开运算与闭运算​

4.3.1 开运算​

    原理:开运算是先进行腐蚀操作,然后再进行膨胀操作。其主要作用是去除图像中的小物体、分离粘连物体、平滑物体的轮廓,同时保持物体的整体位置和形状基本不变。例如,对于一幅包含小噪声点和较大物体的图像,开运算可有效去除小噪声点,对较大物体影响较小。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
kernel = np.ones((5, 5), np.uint8)​
​
# 进行开运算​
opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Opened Image', opened_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

4.3.2 闭运算​

    原理:闭运算是先进行膨胀操作,然后再进行腐蚀操作。主要用于填充物体内部的小孔、连接相邻的物体、平滑物体的轮廓,并且同样能保持物体的整体位置和形状基本不变。比如,对于一幅有小空洞的物体图像,闭运算可将这些小空洞填充。​

代码示例(Python + OpenCV):​

import cv2​
import numpy as np​
​
image = cv2.imread('input_image.jpg', 0)​
​
kernel = np.ones((5, 5), np.uint8)​
​
# 进行闭运算​
closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)​
​
cv2.imshow('Original Image', image)​
cv2.imshow('Closed Image', closed_image)​
cv2.waitKey(0)​
cv2.destroyAllWindows()

五、总结​

    滤波、边缘检测与形态学操作构成了计算机视觉图像处理基础技术的重要组成部分。滤波通过不同方式去除噪声、增强特征,为后续处理提供高质量图像;边缘检测精准提取图像中物体的轮廓,为目标识别、分割等任务奠定基础;形态学操作基于图像形状对图像进行优化,在图像分析的各个环节发挥独特作用。这些基础技术相互配合、相互补充,是深入学习计算机视觉高级算法和实现复杂应用的根基。随着技术的不断发展,这些基础操作也在不断演进和优化,以适应更复杂的图像场景和更高的应用需求。希望本文能为读者在图像处理的学习与实践中提供全面且深入的指导,助力大家在计算机视觉领域不断探索前行。

致读者一封信

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


----------- 业精于勤,荒于嬉 -----------

请添加图片描述

----------- 行成于思,毁于随 -----------

在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署;
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     ③ 🉑提供产品测评,产品推广业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://xcleigh.blog.csdn.net/article/details/146999014(防止抄袭,原文地址不可删除)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第八课:在SD中安装拓展插件

3种拓展安装方式教学 点击Extensions安装方式 经由内置列表查询安装,打开Available,输入链接,点击Load from:,然后筛选后点击Install通过链接安装,复制代码仓库地址,github/gitee,输入Install …

tomcat的web三大组件Sciidea搭建web/maven的tomcat项目

文章目录 1. web项目的搭建1. 创建web项目2.修改web.xml版本3.添加servlet、jsp依赖4.servlet示例(使用注解)5.配置tomcat6.添加artifact7.部署8.启动tomcat、访问9.打war包10.部署到tomcat 2.maven的项目搭建1.创建项目图解 2.tomcat启动方式图解idea打…

ZKmall开源商城多云高可用架构方案:AWS/Azure/阿里云全栈实践

随着企业数字化转型的加速,云计算服务已成为IT战略中的核心部分。ZKmall开源商城作为一款高性能的开源商城系统,其在多云环境下的高可用架构方案备受关注。下面将结合AWS、Azure和阿里云三大主流云平台,探讨ZKmall的多云高可用架构全栈实践。…

【代码模板】如何用FILE操作符打开文件?fopen、fclose

#include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {FILE *fp fopen("1.log", "wb");if (!fp) {perror("Failed open 1.log");return -1;}fclose(fp); }关于权限部分参考兄弟篇【代码模板】C语言中…

Airflow+Spark/Flink vs. Kettle

在迁移亿级(单表超过1.3亿)结构化数据(达梦→星环)的场景下,Airflow(结合分布式计算框架)的综合效果优于Kettle,以下是详细对比与方案建议: 一、核心对比:Air…

多电机显示并排序

多电机显示并排序 要实现根据后端传递过来的驱动电机数据的数量来显示不同数量的数据列表,我们可以使用 Vue 的 v-for 指令来遍历 driveMotorData 数组,并为每个驱动电机生成一个数据列表。这样,无论后端传来多少个驱动电机的数据&#xff0…

图漾相机——C#语言属性设置

文章目录 前言1.示例程序说明2.SDK API功能介绍2.1 ListDevice 枚举设备2.2 Open 打开相机2.3 OpenDeviceByIP 通过IP打开设备2.4 Close 关闭设备2.5 DeviceStreamEnable 取流使能2.6 DeviceStreamFormatDump 取流分辨率2.7 DeviceStreamFormatConfig 取流分辨率配置2.8 Device…

thinkphp8.0上传图片到阿里云对象存储(oss)

1、开通oss,并获取accessKeyId、accessKeySecret <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><tit…

跳跃连接(Skip Connection)与残差连接(Residual Connection)

1. 跳跃连接&#xff08;Skip Connection&#xff09;的基本概念 跳跃连接是一种在深度神经网络中广泛应用的技术&#xff0c;它允许信息在网络中跨层直接传递。在传统的神经网络里&#xff0c;每一层的输出仅仅是前一层输出经过特定变换后的结果。而在具备跳跃连接的网络中&a…

【硬件视界9】网络硬件入门:从网卡到路由器

🌟引言: 专栏:《硬件视界》 【硬件视界8】电源供应器(PSU):计算机的“心脏“ 在数字化高速发展的今天,网络已成为我们日常生活和工作中不可或缺的基础设施。而支撑这一基础设施的核心要素,便是各种各样的网络硬件设备。从连接计算机到网络的网络适配器,到负责数据转发与…

最小生成树理论

1. 基本定义 生成树&#xff1a;在一个连通无向图中&#xff0c;一个生成树是包含所有顶点且边数为 n−1&#xff08;n为顶点数&#xff09;的无环连通子图。 最小生成树&#xff1a;在所有生成树中&#xff0c;边权和最小的那一棵树。也就是说&#xff0c;若每条边有一个非负…

STM32 HAL库 CANFD配置工具

用法说明&#xff1a; 该工具适用于STM32HAL库&#xff0c;可一键生成CANFD的HAL库配置代码。计算依据为HAL库&#xff0c;并参考ZLG标准。 软件界面&#xff1a; 仓库地址&#xff1a; HAL CANFD Init Gen: 适用于STM32控制器的HAL库 版本说明&#xff1a; V1.2.0 &#x…

【11408学习记录】考研英语长难句解析 | 语法拆分+写作模板+真题精讲(附高分秘籍)

2025.04.05 英语语法总结——长难句并列句并列连词并列句的省略 写作书信写作第二段注意 第三段落款 每日一句词汇第一步&#xff1a;辨别第二步&#xff1a;断开第三步&#xff1a;简化 英语 语法总结——长难句 长难句有两个特点&#xff1a;长、难。 之所以又长又难就是因…

实用的alias别名命令——比2=1+1简单的基础命令

目录 alias命令的用处alias命令的写法让alias别名永久存在的办法下篇预告 alias命令的用处 别名&#xff0c;就是linux系统中的命令的别称&#xff0c;而alias命令&#xff0c;可以显示linux系统当前设定的全部别名&#xff0c;当然&#xff0c;也可以自己定义一个别名。 ali…

Kafka 中的批次

在 Kafka 中&#xff0c;批次&#xff08;Batch&#xff09; 是生产者发送消息的一个重要概念。它对 Kafka 的性能、吞吐量、延迟等有很大影响。批量处理可以使消息发送更高效&#xff0c;减少网络往返和磁盘写入的开销。 下面我将详细解释 Kafka 中的批次机制&#xff0c;包括…

联合、枚举、类型别名

数据类型&#xff1a; 已学--整数、实数、字符、字符串、数组、指针、结构待学--向量&#xff08;vector&#xff09;类型&#xff1a;优于数组非主流的类型--联合&#xff08;union&#xff09;、枚举&#xff08;enum&#xff09; 一、联合 联合类似于结构&#xff0c;可以容…

form+ffmpeg+opus录音压缩音频

说明&#xff1a; formffmpegopus录音压缩音频 效果图&#xff1a; step1:opus格式录音 C:\Users\wangrusheng\RiderProjects\WinFormsApp11\WinFormsApp11\Form1.cs using System; using System.Diagnostics; using System.IO; using System.Windows.Forms;namespace WinFo…

软件工程面试题(三十)

将ISO8859-1字符串转成GB2312编码&#xff0c;语句为&#xff1f; String snew String(text.getBytes(“iso8859-1”),”gb2312”). 说出你用过的J2EE标准的WEB框架和他们之间的比较&#xff1f; 答&#xff1a;用过的J2EE标准主要有&#xff1a;JSP&Servlet、JDBC、JNDI…