EmguCV学习笔记 VB.Net 2.S 特别示例

 版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

教程VB.net版本请访问:
EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:VB.Net-CSDN博客

教程配套文件及相关说明以及如何获得pdf教程和代码(博客上的教程内容会和pdf教程一致,教程中也会包含所有代码),请移步:EmguCV学习笔记

2.S 特别示例

本节示例参考《计算机视觉40例从入门到深度学习(OpenCV-Python)》。

2.S.1 生成随机值图像

随机值图像,即每个像素的颜色随机的图像。本节内容介绍了三种方式生成随机值图像。

1、通常的方式

直接使图像每个像素点的颜色为随机颜色。

【代码位置:frmChapter2_S1】Button1_Click

    '生成随机值图像1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        '使用Matrix来生成灰度(单通道)的随机值图像

        Dim s As New Size(400, 400)

        Dim matr As New Matrix(Of Byte)(s)

        Dim r As New Random()

        For i As Integer = 0 To s.Width - 1

            For j As Integer = 0 To s.Height - 1

                matr(i, j) = r.Next(256)

            Next

        Next

        ImageBox1.Image = matr.Mat

        '使用Image来生成彩色(多通道)的随机值图像

        Dim img As New Image(Of Bgr, Byte)(s)

        Dim r2 As New Random()

        For i As Integer = 0 To s.Width - 1

            For j As Integer = 0 To s.Height - 1

                img(i, j) = New Bgr(r2.Next(256), r2.Next(256), r2.Next(256))

            Next

        Next

        ImageBox2.Image = img.Mat

End Sub

运行后如下图所示:

图2-84 普通方法生成随机噪声图片

2、SetRandNormal

Matrix类的SetRandNormal方法用于将矩阵的每个元素设置为正态分布随机数。SetRandNormal方法的具体使用参看2.2.6节【随机矩阵】。

【代码位置:frmChapter2_S1】Button2_Click

    '生成随机值图像2 SetRandNormal

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim matr As New Matrix(Of Byte)(New Size(400, 400))

        matr.SetRandNormal(New MCvScalar(100), New MCvScalar(200))

        Dim m As New Mat

        m = matr.Mat

        ImageBox1.Image = m

        Dim matr1 As New Matrix(Of Byte)(400, 400, 3)

        matr1.SetRandNormal(New MCvScalar(100, 100, 100), New MCvScalar(200, 200, 200))

        Dim m1 As New Mat

        m1 = matr1.Mat

        ImageBox2.Image = m1

End Sub

运行后如下图所示:

 

图2-85 SetRandNormal方法生成随机噪声图片

3、SetRandUniform

Matrix类的SetRandUniform方法用于将矩阵的每个元素设置为均匀分布的随机数,要设置随机数的Matrix对象可以是单通道矩阵或多通道矩阵。该方法声明如下:

Public Sub SetRandUniform (

         floorValue As MCvScalar,

         ceilingValue As MCvScalar

)

参数说明:

  1. floorValue:随机数范围的下界(获取的值包含此下界)。
  2. ceilingValue:随机数范围的上界(获取的值不包含此上界)。

【代码位置:frmChapter2_S1】Button3_Click

    '生成随机值图像3 SetRandUniform

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        Dim matr As New Matrix(Of Byte)(New Size(400, 400))

        matr.SetRandUniform(New MCvScalar(100), New MCvScalar(200))

        Dim m As New Mat

        m = matr.Mat

        ImageBox1.Image = m

        Dim matr1 As New Matrix(Of Byte)(400, 400, 3)

        matr1.SetRandUniform(New MCvScalar(100, 100, 100), New MCvScalar(200, 200, 200))

        Dim m1 As New Mat

        m1 = matr1.Mat

        ImageBox2.Image = m1

End Sub

运行后如下图所示:

图2-86 SetRandUniform方法生成随机噪声图像

2.S.2 图像加密

为了使读者更清楚掌握详细加解密过程,这里分为图像的整体加解密和图像的局部加解密,并附上详细操作步骤,请结合代码深入掌握。

一、图像整体加解密

具体实现步骤:

(一)准备

1、载入源图像(mSrc)

2、与源图像同等大小的随机值图像(mKey)

(二)加密

3、源图像(mSrc)和随机值图像(mKey)进行Xor操作,将源图像加密,生成加密图像(mEnc)。

(三)解密

4、加密图像(mEnc)和随机值图像(mKey)进行Xor操作,将加密图像解密,生成解密图像(mDec)。

以下是详细的代码实现:

【代码位置:frmChapter2_S1】Button4_Click

   '图像加密和解密

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

        Dim mSrc As New Mat("c:\lessons\lena.jpg", ImreadModes.Color)

        Dim mKey As New Mat

        '生成三通道随机值图像

        Dim matr1 As New Matrix(Of Byte)(mSrc.Rows, mSrc.Cols, 3)

        matr1.SetRandNormal(New MCvScalar(0, 0, 0), New MCvScalar(255, 255, 255))

        mKey = matr1.Mat

        '显示密钥图像

        ImageBox1.Image = mKey

        '加密

        Dim mEnc As New Mat()

        CvInvoke.BitwiseXor(mSrc, mKey, mEnc)

        '显示加密图像

        ImageBox2.Image = mEnc

        '解密

        Dim mDec As New Mat

        CvInvoke.BitwiseXor(mEnc, mKey, mDec)

        '显示解密图像

        ImageBox3.Image = mDec

End Sub

运行后如下图所示:

 

图2-87 图像整体加解密

二、三种方式生成加密图像的对比

为了更进一步地做好图像局部加解密,笔者这里将2.S.1节【生成随机值图像】的三种方法做成了函数,只需要输入图像大小就可以生成对应大小的随机值图像。具体代码如下:

【代码位置:frmChapter2_S1】getRandCh3、getRandNormalCh3、getRandUniformCh3

    '普通方式生成三通道随机值图像

    Private Function getRandCh3(ByVal s As Size) As Mat

        Dim img As New Image(Of Bgr, Byte)(s)

        Dim r As New Random()

        For i As Integer = 0 To s.Width - 1

            For j As Integer = 0 To s.Height - 1

                img(i, j) = New Bgr(r.Next(256), r.Next(256), r.Next(256))

            Next

        Next

        Return img.Mat

    End Function

    'SetRandNormal生成三通道随机值图像

    Private Function getRandNormalCh3(ByVal s As Size) As Mat

        Dim matr As New Matrix(Of Byte)(s.Height, s.Width, 3)

        matr.SetRandNormal(New MCvScalar(0, 0, 0), New MCvScalar(255, 255, 255))

        Return matr.Mat

    End Function

    'SetRandUniform生成三通道随机值图片

    Private Function getRandUniformCh3(ByVal s As Size) As Mat

        Dim matr As New Matrix(Of Byte)(s.Height, s.Width, 3)

        matr.SetRandUniform(New MCvScalar(0, 0, 0), New MCvScalar(255, 255, 255))

        Return matr.Mat

End Function

使用以上三个函数对图像加密实现代码如下:

【代码位置:frmChapter2_S1】Button5_Click

    '三种方式生成随机图像进行加密

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

        Dim mSrc As New Mat("C:\learnEmgucv\lena.jpg", ImreadModes.Color)

        '加密1

        Dim mKey1 As New Mat

        mKey1 = getRandCh3(mSrc.Size)

        Dim mEnc1 As New Mat()

        mEnc1 = mSrc.Clone

        CvInvoke.BitwiseXor(mSrc, mKey1, mEnc1)

        ImageBox1.Image = mEnc1

        '加密2

        Dim mKey2 As New Mat

        mKey2 = getRandNormalCh3(mSrc.Size)

        Dim mEnc2 As New Mat()

        CvInvoke.BitwiseXor(mSrc, mKey2, mEnc2)

        ImageBox2.Image = mEnc2

        '加密3

        Dim mKey3 As New Mat

        mKey3 = getRandUniformCh3(mSrc.Size)

        Dim mEnc3 As New Mat()

        CvInvoke.BitwiseXor(mSrc, mKey3, mEnc3)

        ImageBox3.Image = mEnc3

End Sub

运行后如下图所示:

 

图2-88 三种方式生成加密图像

可以看到中间图像加密后隐约能够看到源图像的样子,而其它两种方式能够很好地对图像加密。采用SetRandNormal方式生成的随机值图像,由于使用了正态分布,作为加密方式不理想。

三、图像局部加解密

具体实现步骤:

(一)准备

1、载入源图像(mSrc)

2、生成背景黑色,区域白色的掩码图像1(mMask1)

3、生成背景白色,区域黑色的掩码图像2(mMask2)

4、生成密钥图像(mKey)

(二)加密

5、密钥图像(mKey)和源图像(mSrc)进行Xor操作,将源图像加密,生成加密图像(mEnc)。图2-SA1 第1张图。

6、将加密图像(mEnc)和掩码图像1(mMask1)进行And操作,生成背景黑色+区域加密图像1(mEncPart)。图2-SA1 第2张图。

7、将源图像(mSrc)和掩码图像2(mMask2)进行And操作,生成背景不加密+区域黑色图像2(mnoEncPart)。图2-SA1 第3张图。

8、将加密图像1(mEncPart)和黑色图像2(mnoEncPart)进行直接相加,去除黑色部分,生成背景不加密+区域加密的最终图像(mResult)。图2-SA1 第4张图。

 

图2-89 加密过程

(三)解密

9、将最终图像(mResult)和密钥图像(mKey)进行Xor操作,生成背景加密+区域解密图像1(mDecPart)。图2-SA2 第1张图。

10、将解密图像1(mDecPart)和掩码图像1(mMask1)进行And操作,生成背景黑色+区域解密图像2(monlyDecPart)。图2-SA2 第2张图。

11、将最终图像(mResult)和掩码图像2(mMask2)进行And操作,生成背景不加密+区域黑色图像(mnoDecPart)。图2-SA2 第3张图。

12、将解密图像2(monlyDecPart)和黑色图像(mnoDecPart)进行直接相加,去除黑色部分,生成生成解密图像(mDecResult)。图2-SA1 第4张图。

 

图2-90 解密过程

以下是详细的代码实现:

【代码位置:frmChapter2_S1】Button6_Click

    '图像局部加密和解密

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click

        Dim mSrc As New Mat("C:\learnEmgucv\lena.jpg", ImreadModes.Color)

        ImageBox1.Image = mSrc

        '(200,200,399,399)区域进行加密解密

        '生成背景黑色,区域白色的掩码图像1

        Dim mMask1 As New Mat(mSrc.Size, DepthType.Cv8U, 3)

        mMask1.SetTo(New MCvScalar(0, 0, 0))

        Dim mMask1RIO As New Mat(mMask1, New Rectangle(200, 200, 200, 200))

        mMask1RIO.SetTo(New MCvScalar(255, 255, 255))

        '生成背景白色,区域黑色的掩码图像2

        Dim mMask2 As New Mat(mSrc.Size, DepthType.Cv8U, 3)

        mMask2.SetTo(New MCvScalar(255, 255, 255))

        Dim mMask2RIO As New Mat(mMask2, New Rectangle(200, 200, 200, 200))

        mMask2RIO.SetTo(New MCvScalar(0, 0, 0))

        'Key图像

        Dim mKey As New Mat

        mKey = getRandUniformCh3(mSrc.Size)

        '加密

        Dim mEnc As New Mat

        'Xor 将源图像全加密

        CvInvoke.BitwiseXor(mSrc, mKey, mEnc)

        Dim mEncPart As New Mat

        'And 生成背景黑色+区域加密图像1

        CvInvoke.BitwiseAnd(mEnc, mMask1, mEncPart)

        Dim mnoEncPart As New Mat

        'And 生成背景不加密+区域黑色图像2

        CvInvoke.BitwiseAnd(mSrc, mMask2, mnoEncPart)

        Dim mResult As New Mat

        mResult = mEncPart + mnoEncPart

        '相加,去除黑色部分,生成背景不加密+区域加密的最终图像

        ImageBox2.Image = mResult

        '解密

        Dim mDecPart As New Mat

        'Xor 生成背景加密+区域解密图像1

        CvInvoke.BitwiseXor(mResult, mKey, mDecPart)

        Dim monlyDecPart As New Mat

        'And 生成背景黑色+区域解密图像2

        CvInvoke.BitwiseAnd(mDecPart, mMask1, monlyDecPart)

        Dim mnoDecPart As New Mat

        'And 生成背景不加密+区域黑色图像

        CvInvoke.BitwiseAnd(mResult, mMask2, mnoDecPart)

        Dim mDecResult As New Mat

        '相加,生成解密图像

        mDecResult = monlyDecPart + mnoDecPart

        ImageBox3.Image = mDecResult

End Sub

运行后如下图所示:

 

图2-91 图像局部加解密

以上代码仅显示了加密解密结果,有兴趣的朋友可以将每一步生成的图像显示出来进一步了解加解密过程。

2.S.3 文字纹理

将文字图像生成0和255的二值化图像,使文字部分为黑色(根据实际情况需要考虑反色),然后将文字图像和纹理图像直接相加,文字图像黑色(值为0)的部分相加后为纹理图像的颜色,文字图像白色(值为255)的部分相加后保持白色(255)。具体实现代码如下:

【代码位置:frmChapter2_S2】Button1_Click

    '灰度图像,以指定图像作为文字纹理

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim msrc As New Mat("c:\learnEmgucv\lena.jpg", ImreadModes.Grayscale)

        ImageBox1.Image = msrc

        '文字文件

        Dim mwatermark As New Mat("c:\learnEmgucv\watermark.jpg", ImreadModes.Grayscale)

        ImageBox2.Image = mwatermark

        Dim mmask As New Mat

        '二值化并反色:将文字部分变为黑色0

        CvInvoke.Threshold(mwatermark, mmask, 0, 255, ThresholdType.BinaryInv)

        Dim result As New Mat

        result = msrc + mmask

        ImageBox3.Image = result

End Sub

运行后如下图所示:

 

图2-92 灰度图像的文字增加纹理

如果是彩色图像,那么先将三个通道分解出来,分别与文字的二值化图像相加,最后再合并。具体实现代码如下:

【代码位置:frmChapter2_S2】Button2_Click

    '彩色图像,以指定图像作为文字纹理

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim msrc As New Mat("c:\learnEmgucv\lena.jpg", ImreadModes.Color)

        ImageBox1.Image = msrc

        '文字文件

        Dim mwatermark As New Mat("c:\learnEmgucv\watermark.jpg", ImreadModes.Grayscale)

        ImageBox2.Image = mwatermark

        Dim mmask As New Mat

        '二值化并反色:将文字部分变为黑色0

        CvInvoke.Threshold(mwatermark, mmask, 0, 255, ThresholdType.BinaryInv)

        '分解每个通道

        Dim mchanel3() As Mat

        mchanel3 = msrc.Split()

        '每个通道计算后再合并

        Dim mv As New VectorOfMat

        For i As Integer = 0 To mchanel3.Length - 1

            Dim msingle As New Mat

            msingle = mchanel3(i) + mmask

            mv.Push(msingle)

        Next

        Dim result As New Mat

        CvInvoke.Merge(mv, result)

        ImageBox3.Image = result

End Sub

运行后如下图所示:

 

图2-93 彩色图像的文字增加纹理

2.S.4 图像水印

将水印文件二值化后,与源文件相加,即可得到相应的水印图像。具体实现代码如下:

【代码位置:frmChapter2_S2】Button3_Click

    '图像水印

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        Dim msrc As New Mat("c:\learnEmgucv\lena.jpg", ImreadModes.Grayscale)

        ImageBox1.Image = msrc

        '水印文件,与源图像大小相同

        Dim mwatermark As New Mat("c:\learnEmgucv\watermark.jpg", ImreadModes.Grayscale)

        ImageBox2.Image = mwatermark

        CvInvoke.Threshold(mwatermark, mwatermark, 0, 255, ThresholdType.Binary)

        Dim mendwatermark As New Mat

        '相加

        'mwatermark0的元素会将最后结果mendwatermark中对应位置的元素保持不变

        'mwatermark255的元素会将最后结果mendwatermark中对应位置的元素设置为255

        mendwatermark = mwatermark + msrc

        ImageBox3.Image = mendwatermark

    End Sub

运行后如下图所示:

 

图2-94 图像增加水印

除了直接相加外,还可以指定水印图像和源图像的权重再相加。

【代码位置:frmChapter2_S2】Button4_Click

    '图像水印

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

        Dim msrc As New Mat("c:\learnEmgucv\lena.jpg", ImreadModes.Grayscale)

        ImageBox1.Image = msrc

        '水印文件,与源图像大小相同

        Dim mwatermark As New Mat("c:\learnEmgucv\watermark.jpg", ImreadModes.Grayscale)

        ImageBox2.Image = mwatermark

        CvInvoke.Threshold(mwatermark, mwatermark, 0, 255, ThresholdType.Binary)

        Dim mendwatermark As New Mat

        'AddWeighted指定权重系数

        Dim mendwatermark2 As New Mat

        CvInvoke.AddWeighted(msrc, 0.4, mwatermark, 0.2, 0, mendwatermark2)

        ImageBox3.Image = mendwatermark2

End Sub

运行后如下图所示:

图2-95 图像增加水印

彩色图像水印仍然采取分解图像通道,分别处理后再合并的做法:

【代码位置:frmChapter2_S2】Button5_Click

    '彩色图像水印

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

        Dim msrc As New Mat("c:\learnEmgucv\lena.jpg", ImreadModes.Color)

        ImageBox1.Image = msrc

        '水印文件,与源图像大小相同

        Dim mwatermark As New Mat("c:\learnEmgucv\watermark.jpg", ImreadModes.Grayscale)

        ImageBox2.Image = mwatermark

        CvInvoke.Threshold(mwatermark, mwatermark, 0, 255, ThresholdType.Binary)

        '分解每个通道

        Dim mchanel3() As Mat

        mchanel3 = msrc.Split()

        '每个通道计算后再合并

        Dim mv As New VectorOfMat

        For i As Integer = 0 To mchanel3.Length - 1

            Dim msingle As New Mat

            msingle = mchanel3(i) + mwatermark

            mv.Push(msingle)

        Next

        Dim result As New Mat

        CvInvoke.Merge(mv, result)

        ImageBox3.Image = result

End Sub

运行后如下图所示:

 

图2-96 彩色图像增加水印

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg的基础命令

文章目录 ffmpeg/ffplay/ffprobe区别ffmpeg 的作用ffplay的作用ffprobe的作用 ffmpeg使用概述功能概述转码过程简单使用FFMPEG -i常用的 -i例子 ff***工具之间共享的选项ffmpeg主要选项ffmpeg提取音视频数据ffmpeg命令修改原有的视频格式ffmpeg命令裁剪和合并视频拼接视频的方式…

计算机网络基础详解:从网络概述到安全保障的全面指南

目录 网络基础详细概述 1. 网络概述 1.1数据通信 1.2资源共享 1.3分布式处理 1.4负载均衡 2. 网络分类 2.1按覆盖范围: 2.1.1局域网 (LAN): 2.1.2城域网 (MAN): 2.1.3广域网 (WAN): 2.2按拓扑结构: 2.2.1…

python request 发送包含文件请求

file_path rD:\work\200K.pdf # 额外的参数 # 请求文件 url "http://192.168.1.111:8888/test"payload {param1: test,param2: test2} files [(file, (file_path, open(file_path, rb), application/pdf)) ] headers {} response requests.request("POST&…

X-Recon:一款针对Web安全的XSS安全扫描检测工具

关于X-Recon X-Recon是一款功能强大的Web安全扫描与检测工具,该工具能够帮助广大研究人员识别网页端输入数据,并执行XSS扫描任务。 功能介绍 1、子域名发现:检索目标网站的相关子域名并将其整合到白名单中。这些子域名可在抓取过程中使用&am…

yolov8旋转框+关键点检测

一、Yolov8obb_kpt -----------------------------------现已在v8官方库上更新旋转框分割算法和旋转框关键点检测算法-------------------------- ------------------------------------------- https://github.com/yzqxy/ultralytics-obb_segment---------------------------…

苗情灾情监控系统的工作原理

TH-MQ1苗情灾情监控系统,也常被称为作物生长检测仪,是现代农业技术中的一项重要创新,它集成了物联网、大数据、人工智能等先进技术,为农业生产提供了全面、精准的监测与诊断服务。通过集成高清摄像头、高精度传感器、无人机等多种…

【TCP/IP】自定义应用层协议,常见端口号

互联网中,主流的是 TCP/IP 五层协议 5G/4G 上网,是有自己的协议栈,要比 TCP/IP 更复杂(能够把 TCP/IP 的一部分内容给包含进去了) 应用层 可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信…

VueX 使用

1.简介 就是用来多组件共享数据的实现用的 2.使用VueX 因为使用的是vue2 所以下的是vuex3 若是vue3 必须下的是 vue4 npm i vuex3 3.搭建环境 1.创建 src/store/index.js //该文件用于创建一个Vuex中最为核心的store//引入VueX import Vuex from vuex import Vue from vu…

微服务系列:Spring Cloud 之 Feign、Ribbon、Hystrix 三者超时时间配置

Feign 自身有超时时间配置 Feign 默认集成的 Ribbon 中也有超时时间配置 假如我们又使用了 Hystrix 来实现熔断降级,Hystrix 自身也有一个超时时间配置 注: spring-cloud-starter-openfeign 低一点的版本中默认集成的有 Hystrix,高版本中又移除了。 …

XSS-DOM

文章目录 源码SVG标签Dom-Clobbringtostring 源码 <script>const data decodeURIComponent(location.hash.substr(1));;const root document.createElement(div);root.innerHTML data;// 这里模拟了XSS过滤的过程&#xff0c;方法是移除所有属性&#xff0c;sanitize…

如何发布自己的NPM包详细步骤

前言 在前端开发中&#xff0c;将自己编写的 Vue 组件或插件打包并发布到 NPM 上&#xff0c;不仅可以方便自己在其他项目中复用&#xff0c;还能分享给更多的开发者使用。本文将从 NPM 注册、登录与发布流程&#xff0c;及如何通过 Vue CLI 打包插件的角度详细介绍如何发布 V…

【Linux-进程】系统初识:冯诺依曼体系结构

系列文章&#xff1a;《Linux入门》 目录 冯诺依曼体系结构 1&#xff09;硬件上 &#x1f337;1.什么是冯诺依曼体系结构&#xff1f; &#x1f337;2.冯诺依曼结构的五个主要组成部分 1.运算器 2.控制器 3.存储器 4.输入输出 设备 ⁉️3.为什么还需要内存呢&#xf…

vue中点击导航栏,动态改变样式,经典写法

vue中点击导航栏&#xff0c;动态改变样式&#xff0c;经典写法 在vue中&#xff0c;我们通常会有这样的情况&#xff0c;在多个子模块之间&#xff0c;点击其中一个子模块&#xff0c;修改当前点击的子模块的样式。如图&#xff0c;点击B模块时&#xff0c;模块B样式改变&…

小卷原创视频教程:Java开发必会的Linus环境搭建

csdn的各位同学&#xff0c;大家好&#xff0c;我是小卷。最近一段时间写博客不是那么勤快了&#xff0c;主要是在帮助Java小白做学习录屏。 后续更多会以学习视频的方式和大家一起交流Java、前端以及相关的技术。本次分享的是Java开发必须要会的Linux环境搭建。 衷心感谢各位小…

登录过程记录

过程&#xff1a; 未登录状态打开我的消息页-》调用后端接口查询登录状态->后端接口从cookie里拿lt,判断是否登录-》未登录&#xff0c;携带页面链接(我的消息)跳转passport【单点登录服务】 登录页-》输入验证码提交后-》验证成功-》根据用户信息生成票据-》携带票据和我的…

电动汽车和混动汽车DC-DC转换器的创新设计与测试方法

汽车 DC-DC 转换器市场规模将达到187亿美元&#xff0c;年复合增长率为10%。 DC-DC 转换器是汽车的重要组成部分&#xff0c;它可以通过电压转换为各种车载系统供电&#xff0c;例如日益复杂的车载信息娱乐系统、使用驾驶辅助系统&#xff08;ADAS&#xff09;实现的增强安全功…

C++复习之STL

STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;提供了丰富且高效的数据结构和算法。STL主要由6大组件构成&#xff0c;分别是容器、算法、迭代器、适配器、仿函数和空间配置器。 容器&#xff08;Containers&#…

【杂谈】-8个常用的Python图像操作库

8个常用的Python图像操作库 文章目录 8个常用的Python图像操作库1、OpenCV2、Pillow&#xff08;PIL&#xff09;3、Scikit Image4、Numpy5、SciPy6、Mahotas7、SimpleITK8、Matplotlib 在当今世界&#xff0c;数据在每个行业垂直领域中都发挥着至关重要的作用。图像可以是提取…

【Delphi】中多显示器操作基本知识点

提要&#xff1a; 目前随着计算机的发展&#xff0c;4K显示器已经逐步在普及&#xff0c;笔记本的显示器分辨率也都已经超过2K&#xff0c;多显示器更是普及速度很快。本文介绍下Delphi中操作多显示器的基本知识点&#xff08;Windows系统&#xff09;&#xff0c;这些知识点在…

【Django开发】前后端分离django美多商城项目第1篇:欢迎来到美多 项目主要页面介绍【附代码文档】

本教程的知识点为&#xff1a; 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计&#xff1a; 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…