OV7725摄像头的彩色图像采集原理与液晶显示《一》 OV7725摄像头的彩色图像采集原理与液晶显示《一》

OV7725摄像头的彩色图像采集原理与液晶显示《一》

前言:
摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D[1] (模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再传输给其他显示硬件就可以显示看到图像了
我要讲解的是0V7725摄像头,带FIFO缓存,以及通过STM32F103MCU进行控制,在采用ILI9341控制器芯片的液晶屏(分辨率240*320)上显示。
我会分两大板块介绍:
第一是摄像头图像数据采集的过程
第二是图像数据在液晶屏上显示的过程
摄像头图像数据采集
以下是要讲的几个小点:
0.OV7725的摄像头结构
1.摄像头(实际上是图像传感器在采集)采集图像获得图像数据(是怎么样获得彩色信息数据的呀这个我比较关心与好奇)是怎样的一个过程。
2.摄像头(从硬件电路上讲是0V7725芯片在传输数据)将数据传输给FIFO(起数据缓冲的作用)的过程是个什么样的过程。
3.(由数字电路基础知,硬件电路上传输数据是需要时钟的)通过什么时序,该时序又是什么样的。
5.然后根据程序讲解,引脚间的连接与配置。
6.然后根据程序讲解ov7725的芯片初始化过程。
0>OV7725摄像头的结构:
晶振、板载电路、镜头、FIFO存储器(AL422B芯片)、CMOS数字图像传感器(Ov7725CMOS感光芯片)、DSP数字算法处理芯片(用于处理采集到的图像数据)
结构功能介绍:
CMOS图像传感器:首先什么是CMOS图像传感器,CMOS图像传感器通常由像敏单元阵列、行驱动器、列驱动器、时序控制逻辑、AD转换器、数据总线输出接口、控制接口等几部分组成,这几部分通常都被集成在同一块硅片上。其工作过程一般可分为复位、光电转换、积分、读出几部分。
我们采用的该Ov7725图像传感器的像素30万,分辨率:480*640支持使用 VGA 时序输出图像数据,也支持QVGA时序输出240*320(本实验为了妥协FIFO的存储量,只能存储一帧该分辨率大小的图形,而且我们的屏幕也是240*320的显示分辨率),输出图像的数据格式支持 YUV(422/420)(这个后面会介绍)、 YCbCr422(这个后面会介绍) 以及 RGB565 格式。它还可以对采集得到的图像进行补偿,支持伽玛曲线、 白平衡、饱和度、色度等基础处理(这些处理为什么明明不懂我还要说,因为程序配置时你会发现一些莫名其妙的配置,我们虽然不用,但是我们要配成不用,所以那些莫名其妙的程序就是对此的配置)
DSP数字算法处理芯片:这个部分就是OV7725芯片中的结构,单独提出来知识为了便于我们对结构的理解。
FIFO存储器:接收图像传感器传过来的图像数据。

Ov7725芯片内部结构(注:FIFO不属于OV7725内部元件)
此处本有图片(可以从我的评论中下载资源,下述提到的图片我都会打包发评论)
ov7725芯片内部
(1) 控制寄存器——控制接口
标号处的是 OV7725 的控制寄存器,它根据这些寄存器配置的参数来运行,而这些参数是由外部控制器通过 SCL 和 SDA 引脚写入的, SCL 与 SDA 使用的通讯协议 SCCB 跟 I2C 十分类似,在 STM32 中我们完全可以直接用 I2C 硬件外设来控制。
(2) 通信、控制信号及时钟——时序控制逻辑
标号处包含了 OV7725 的通信、控制信号及外部时钟,其中 PCLK、 HREF 及VSYNC分别是像素同步时钟、行同步信号以及帧同步信号,这与液晶屏控制中的VGA 信号是很类似的。 RSTB 引脚为低电平时,用于复位整个传感器芯片,PWDN 用于控制芯片进入低功耗模式。注意最后的一个 XCLK 引脚,它跟 PCLK是完全不同的, XCLK 是用于驱动整个传感器芯片的时钟信号,是外部输入到OV7725 的信号;而 PCLK 是 OV7725 输出数据时的同步信号,它是由 OV7725 输出的信号。 XCLK 可以外接晶振或由外部控制器提供,若要类比 XCLK 之于OV7725 就相当于 HSE 时钟输入引脚与 STM32 芯片的关系, PCLK 引脚可类比
STM32 的 I2C 外设的 SCL 引脚。
(3) 感光矩阵,应该就是传感器的像敏单元阵列(这个就见名知义了)标号处的是感光矩阵,光信号在这里转化成电信号,经过各种处理,这些信号存储成由一个个像素点表示的数字图像。
(4) 数据输出信号
标号处包含了 DSP 处理单元,它会根据控制寄存器的配置做一些基本的图像处理运算。这部分还包含了图像格式转换单元及压缩单元,转换出的数据最终通过D0-D9 引脚输出,一般来说我们使用 8 根据数据线来传输,这时仅使用 D2-D9 引脚。
图像信息的采集
外界图像透过镜头,经过一个感光矩阵(一个阵列),即传感器的像敏单元阵列,其上我的理解就是一些感光元件,每个感光元件对应于图像传感器的一个像点,这些感光单元的核心元件就是感光二极管,该二极管接受光照后能产生电流(也可能是电压,总之是模拟信号),对应的电流强度对应于相应的光的强度。注意CMOS传感器的每一个感光单元上都已经集成了信号放大器(一个感光单元产生的电流肯定是极其微弱的)和A/D转换器,所以由感光单元输出的就是直接是数字信号,然后所有的每个感光单元的数字信号整合后传给DSP芯片做一些处理(可做的处理上面已经介绍了,当然这了解仅仅只是为了科普)。
好,至此我们已经理解了摄像头是如何采集的光的强度的,所以说科技真是神奇。只有不知道,没有事物是绝对神奇的。那么有人会问了,那只是采集了光的强度信息而已啊,到底是怎么采集彩色信息的我还是不知道啊?嗯,的确,没有色彩的世界你跟我说X啊。下面我就来介绍。
cmos图像传感器通过感光元件上的彩色滤光片来区分色彩的,其实液晶显示也用到了彩色滤光片来显示色彩。理论上:我们以R\G\B三种滤光片分别覆盖三个感光元件(即像点),这样由三个像点产生一个彩色像素。这三个像点的数字信号就是一个彩色像素的数据。所以可知产生一个彩色像素数据的感光单元是由3个上述的感光元件,且每个元件上分别有R/G/B滤光片所组成的。(这个应该是可以理解了)
一个摄像头上的所有感光元件一起产生的数字信号构成一幅图像的数据,如此一幅图像采集完毕。
采集到的信息传输给FIFO芯片AL422B
即ov7725芯片将它采集到的图像数据传递给FIFO.当然了,ov7725芯片怎么知道啥时候要传输数据,FIFO又怎么知道要写入数据呢?这个时候就是时序在起作用了,本质就是一些已拟定成规的时钟。Stm32通过写入指令即配置好ov7725的寄存器,将相应的寄存器的相应的位进行置位或清除达到写入指令配置的目的。OV7725芯片的配置涉及到SCCB时序,而将数据传给FIFO涉及到FIFO的相应写入时序(到时读出数据又涉及到读时序,总之进行特定的操作前都要有特定的时钟形式,想想数电中的0和1数据是怎么传的理解下)。
从科普的角度知道是怎么传(到时候后面还要从程序及硬件的角度讲)的,然后再来讲讲数据传输格式。Stm32控制 OV7725 时采用 SCCB 协议读写其寄存器,配置它的传输时序,而它输出图像时则使用 VGA 或QVGA 时序, 其中 VGA 在输出图像分辨率为 480*640 时采用, QVGA 是 Quarter VGA, 其输出分辨率为 240*320,这些时序跟控制液晶屏输出图像数据时十分类似。OV7725传感器输出图像时,一帧帧(一帧即一幅图像,也可理解为一场,也不知准确不)地输出,在帧内的数据一般从左到右,从上到下,一个像素一个像素地输出(也可通过寄存器修改方向)。
同时,对FIFO的写入时序是ov7725芯片自动产生的,stm32可以通过一个与非门控制FIFO的写使能引脚。(而且产生的是QVGA的时序,这个是通过对OV7725芯片的寄存器配置实现的)
所以我们知道了,根据我们所采用的液晶屏分辨率为240*320大小的,显然我们要采用QVGA格式的。又因为一个像素的大小RGB565为16位的,而0V7725与FIFO间的数据传输线只有8根,故OV7725向FIFO发送一个像素的信息时每次只能发8位,共需发两次,当然PCLK(pixelclock)时钟也就需要两个了,需要时钟推动两次嘛,见时序参考)。
请参考以下时序图理解:当 HREF 为高电平时, 像素数据依次传输,每传输完一行数据时,行同步信号 HREF 会输出一个电平跳变信号间隔开当前行和下一行的数据;一帧的图像由 N 行数据组成, 当 VSYNC 为低电平时,各行的像素数据依次传输, 每传输完一帧图像时,VSYNC 会输出一个电平跳变信号(这句话特别注意,有大用途)
此处是像素同步时序图与QVGA帧像素同步时序图(见评论)
像素同步时序
QVGA像素同步时序
对于时序我的理解拿到该手册,照着它的时钟高低变化拉高或者拉低相应引脚的电平就是了。怎么拉高拉低同样又是配置寄存器,GPIOx->ODR,英文名见名知义,数据输出寄存器,OutputDataRegister,该寄存器的功能见下图
(此处本该是寄存器的图,见评论)
寄存器
端口输出数据,其实也就是输出0,1嘛然后就是相应的拉高或是拉低电平,只不过在逻辑电路里,从高电平到低电平是需要一定的时间的。
所以当我们连接好引脚后,在配置或是初始化了相应的引脚后,需要什么操作时,根据它的时序对相应的引脚进行相应的拉高或是拉低。在程序上到底是怎么执行的后面我们在讲,这里权当科普。
那怎么才算传输一幅图像数据结束呢?我们要知道什么时候采集的数据传输至FIFO结束了,然后这个时候可以开始传输了呀是吧?由于使用中断的方式来检测 VSYNC 的信号,所以要把相应的引脚初始化并为它配置为EXTI 中断,由于 VSYNC 出现两次下降沿,才表示 FIFO 保存了一幅图像,所以在检测 VSYNC 下降沿的中断服务函数中,使用一个变Ov7725_vsync作为标志。 Ov7725_vsync标志的初始值为 0,当检测到第一次上升沿时,控制 FIFO 的相应 GPIO 引脚,允许 OV7725 向 FIFO 写入图像数据,并把标志值设置为 1;检测到第二次上升沿时,禁止 OV7725 写 FIFO,把标志设置为 2,而我们将会在 main函数的循环中对该标志进行判断,当 Ov7725_vsync=2时,STM32 开始从 FIFO 读取数据并显示,读取完毕后把 Ov7725_vsync 标置复位为 0,重新开始下一幅图像的采集
SCCB时序、像素传输时序、QVGA帧同步时序、FIFO读、写时序
SCCB时序已经提到过了,是stm32与ov7725通讯的时序,配置它的工作模式。外部控制器对 OV7725 寄存器的配置参数是通过 SCCB 总线传输过去的,而 SCCB 总线跟 I2C十分类似,所以在 STM32驱动中可以直接使用片上 I2C外设与它通讯。
想具体了解,请看我上传的的pdf文档。
这里还需要说一点就是,
这里我就结合我的理解简单介绍一下。(其实是野火哥的用户手册啦)
起始信号与停止信号的时钟
SCCB起始信号与停止信号
 起始信号: 在 SCL(图中为 SIO_C) 为高电平时, SDA(图中为 SIO_D)出现一个下降沿,则 SCCB 开始传输。
 停止信号:在 SCL 为高电平时, SDA 出现一个上升沿,则 SCCB 停止传输。
 数据有效性:除了开始和停止状态, 在数据传输过程中,当 SCL 为高电平时,必须保证 SDA 上的数据稳定,也就是说, SDA 上的电平变换只能发生在 SCL 为低电平的时候, SDA 的信号在 SCL 为高电平时被采集。
那么我的理解就是,起始就是传输数据开始了,停止就是传输数据停止了。看图然后拉高或是拉低相应的引脚电平就行了,怎么拉,配置GPIOx_ODR,已经讲过了的哟。数据有效性能看懂了吧。
像素传输时序:
像素同步时序
(此处是像素同步(传输)时序图,见评论)
(然后这里说下我的理解就是像素同步时序应该是与FIFO写时序相同,然后这个时序是由ov7725芯片实现的)
QVGA像素同步时序
(此处是QVGA帧像素同步时序图,见评论)
(就是OV7725传输给FIFO的一帧图像数据时所用到的时序,会产生行同步信号与场信号)
FIFO写时序
(此处是FIFO写时序图,见评论)
下图是我根据原理图画的草图:表示出了OV7725将数据传输给FIFO的硬件电路内部连接,所以从图中可以看出FIFO的写时序(QVGA)是通过OV7725自动产生的,跟我们对OV7725芯片的配置有关,由此可以想到,改变配置就会改变OV7725与FIFO间的像素传输时序,由此改变传输的像素数据。后面结合程序配置讲解时会在提到。
其实弄懂了原理,基本上就是根据手册翻译成程序语言就行了,所以说自己完成一个设备的驱动程序的编写完全是没有问题的。
FIFO与OV7725连接
(OV7725与FIFO的连接图草图)
产生FIFO的读时序的时钟就是由stm32来完成的了,通过拉高或者拉低相应引脚的电平来实现。怎么拉的我前面说过了。
FIFO读时序
(此处是FIFO的读时序图,见评论)
重申一遍就是,时序就是几个特定形式的时钟,在电平跳变处(可能是上升沿也可能是下降沿),具有相应的功效,能进行相应的数据操作,这个数据可以是指令数据也可以是用户需要的数据。
在提示一遍,我所讲解的硬件结构是,OV7725芯片的摄像头,有FIFO存储器芯片AL422B.## OV7725摄像头的彩色图像采集原理与液晶显示《一》 ##
后续的程序配置相继贴出。

                        <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count">16</span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.csdn.net/huzhoudaxia">
                    <img src="https://profile.csdnimg.cn/6/E/5/3_huzhoudaxia" class="avatar_pic" username="huzhoudaxia">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/1x/3.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/huzhoudaxia" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">huzhoudaxia</a></span>
                                            </div>
                    <div class="text"><span>发布了4 篇原创文章</span> · <span>获赞 25</span> · <span>访问量 3万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://im.csdn.net/im/main.html?userName=huzhoudaxia" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                        </a>
                                                            <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    </article>
    
<script>
$("#blog_detail_zk_collection").click(function(){
    window.csdn.articleCollection()
})
        <div class="recommend-box"><div class="recommend-item-box type_blog clearfix" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/weixin_30500663/article/details/96878165&quot;,&quot;strategy&quot;:&quot;BlogCommendFromMachineLearnPai2&quot;,&quot;index&quot;:&quot;0&quot;}">
<div class="content" style="width: 852px;">
	<a href="https://blog.csdn.net/weixin_30500663/article/details/96878165" target="_blank" rel="noopener" title="STM32驱动OV7725摄像头颜色识别">
	<h4 class="text-truncate oneline" style="width: 692px;">
			STM32驱动<em>OV</em>7725<em>摄像头</em>颜色识别		</h4>
	<div class="info-box d-flex align-content-center">
		<p class="date-and-readNum oneline">
			<span class="date hover-show">02-07</span>
			<span class="read-num hover-hide">
				阅读数 
				554</span>
			</p>
		</div>
	</a>
	<p class="content" style="width: 852px;">
		<a href="https://blog.csdn.net/weixin_30500663/article/details/96878165" target="_blank" rel="noopener" title="STM32驱动OV7725摄像头颜色识别">
			<span class="desc oneline">实验目的: 使用stm32驱动OV7725摄像头进行图像实时采集,在tft屏幕上实时显示并识别图像中的特定颜色,在颜色的周围画上框。实验现象: 我的工程代码链接: http://download.cs...</span>
		</a>
		<span class="blog_title_box oneline ">
								<span class="type-show type-show-blog type-show-after">博文</span>
										<a target="_blank" rel="noopener" href="https://blog.csdn.net/weixin_30500663">来自:	<span class="blog_title"> weixin_30500663的博客</span></a>
											</span>
	</p>
</div>
</div>
还能输入1000个字符
<div class="comment-list-container">
	<a id="comments"></a>
	<div class="comment-list-box"><ul class="comment-list"><li class="comment-line-box d-flex" data-commentid="9835081" data-replyname="qq_34401994">      <a target="_blank" href="https://me.csdn.net/qq_34401994"><img src="https://profile.csdnimg.cn/C/1/C/3_qq_34401994" username="qq_34401994" alt="qq_34401994" class="avatar"></a>        <div class="right-box ">          <div class="new-info-box clearfix">            <a target="_blank" href="https://me.csdn.net/qq_34401994"><span class="name ">今天也迟到</span></a><span class="date" title="2019-05-22 22:38:53">7个月前</span><span class="floor-num"></span><span class="new-comment" style="display:inline-block;margin-top:0px">好贴</span><span class="new-opt-box"><a class="btn btn-link-blue btn-report" data-type="report">举报</a><a class="btn btn-link-blue btn-reply" data-type="reply">回复</a></span></div><div class="comment-like " data-commentid="9835081"><svg t="1569296798904" class="icon " viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5522" width="200" height="200"><path d="M726.016 906.666667h-348.586667a118.016 118.016 0 0 1-116.992-107.904l-29.013333-362.666667A117.589333 117.589333 0 0 1 348.458667 309.333333H384c126.549333 0 160-104.661333 160-160 0-51.413333 39.296-88.704 93.397333-88.704 36.906667 0 71.68 18.389333 92.928 49.194667 26.88 39.04 43.178667 111.658667 12.714667 199.509333h95.530667a117.418667 117.418667 0 0 1 115.797333 136.106667l-49.28 308.522667a180.608 180.608 0 0 1-179.072 152.704zM348.458667 373.333333l-4.48 0.170667a53.461333 53.461333 0 0 0-48.768 57.472l29.013333 362.666667c2.218667 27.52 25.6 49.024 53.205333 49.024h348.544a116.949333 116.949333 0 0 0 115.925334-98.816l49.322666-308.736a53.418667 53.418667 0 0 0-52.650666-61.781334h-144.085334a32 32 0 0 1-28.458666-46.634666c45.909333-89.130667 28.885333-155.434667 11.562666-180.522667a48.981333 48.981333 0 0 0-40.192-21.504c-6.912 0-29.397333 1.792-29.397333 24.704 0 111.317333-76.928 224-224 224h-35.541333zM170.624 906.666667a32.042667 32.042667 0 0 1-31.872-29.44l-42.666667-533.333334a32.042667 32.042667 0 0 1 29.354667-34.474666c17.066667-1.408 33.024 11.733333 34.432 29.354666l42.666667 533.333334a32.042667 32.042667 0 0 1-31.914667 34.56z" p-id="5523"></path></svg><span></span></div></div></li></ul><ul class="comment-list"><li class="comment-line-box d-flex" data-commentid="8950887" data-replyname="weixin_44302321">      <a target="_blank" href="https://me.csdn.net/weixin_44302321"><img src="https://profile.csdnimg.cn/F/5/5/3_weixin_44302321" username="weixin_44302321" alt="weixin_44302321" class="avatar"></a>        <div class="right-box ">          <div class="new-info-box clearfix">            <a target="_blank" href="https://me.csdn.net/weixin_44302321"><span class="name ">weixin_44302321</span></a><span class="date" title="2018-12-27 17:23:06">1年前</span><span class="floor-num"></span><span class="new-comment" style="">讲的太好了,还有一点不理解,就是一帧的图像由N行组成,这个N是240么?(240*320的分辨率)还是不固定的</span><span class="new-opt-box"><a class="btn btn-link-blue btn-report" data-type="report">举报</a><a class="btn btn-link-blue btn-reply" data-type="reply">回复</a></span></div><div class="comment-like " data-commentid="8950887"><svg t="1569296798904" class="icon " viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5522" width="200" height="200"><path d="M726.016 906.666667h-348.586667a118.016 118.016 0 0 1-116.992-107.904l-29.013333-362.666667A117.589333 117.589333 0 0 1 348.458667 309.333333H384c126.549333 0 160-104.661333 160-160 0-51.413333 39.296-88.704 93.397333-88.704 36.906667 0 71.68 18.389333 92.928 49.194667 26.88 39.04 43.178667 111.658667 12.714667 199.509333h95.530667a117.418667 117.418667 0 0 1 115.797333 136.106667l-49.28 308.522667a180.608 180.608 0 0 1-179.072 152.704zM348.458667 373.333333l-4.48 0.170667a53.461333 53.461333 0 0 0-48.768 57.472l29.013333 362.666667c2.218667 27.52 25.6 49.024 53.205333 49.024h348.544a116.949333 116.949333 0 0 0 115.925334-98.816l49.322666-308.736a53.418667 53.418667 0 0 0-52.650666-61.781334h-144.085334a32 32 0 0 1-28.458666-46.634666c45.909333-89.130667 28.885333-155.434667 11.562666-180.522667a48.981333 48.981333 0 0 0-40.192-21.504c-6.912 0-29.397333 1.792-29.397333 24.704 0 111.317333-76.928 224-224 224h-35.541333zM170.624 906.666667a32.042667 32.042667 0 0 1-31.872-29.44l-42.666667-533.333334a32.042667 32.042667 0 0 1 29.354667-34.474666c17.066667-1.408 33.024 11.733333 34.432 29.354666l42.666667 533.333334a32.042667 32.042667 0 0 1-31.914667 34.56z" p-id="5523"></path></svg><span></span></div></div></li></ul></div>
	<div id="commentPage" class="pagination-box d-none" style="display: block;"><div id="Paging_05078978997220577" class="ui-paging-container"><ul><li class="js-page-first js-page-action ui-pager ui-pager-disabled"></li><li class="js-page-prev js-page-action ui-pager ui-pager-disabled">上一页</li><li data-page="1" class="ui-pager focus">1</li><li class="js-page-next js-page-action ui-pager ui-pager-disabled">下一页</li><li class="js-page-last js-page-action ui-pager ui-pager-disabled"></li></ul></div></div>
	
</div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_59" data-pid="59"><script type="text/javascript">
(function() {
    var s = "_" + Math.random().toString(36).slice(2);
    document.write('<div style="" id="' + s + '"></div>');
    (window.slotbydup = window.slotbydup || []).push({
        id: "u3491668",
        container:  s
    });
})();

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_60" data-pid="60"><iframe src="https://adaccount.csdn.net/#/preview/1119?m=cyLcipAbEEEHADiAtnUnAmLpHLtnJbJEAicpvXoSpHbttnALLnLnXAQHcbcicoLHiniQWitUEXSfLSfDLpXLEyLJbpAcHcitJbQQ&amp;k=" scrolling="no" width="100%" height="75px" frameborder="0"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=cyLcipAbEEEHADiAtnUnAmLpHLtnJbJEAicpvXoSpHbttnALLnLnXAQHcbcicoLHiniQWitUEXSfLSfDLpXLEyLJbpAcHcitJbQQ"></div></div>
		<div class="recommend-item-box blog-expert-recommend-box" style="display: block;">
		<div class="d-flex">
			<div class="blog-expert-recommend">
				<div class="blog-expert">
					<div class="blog-expert-flexbox" data-report-view="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/weixin_30500663" target="_blank"><img src="https://profile.csdnimg.cn/6/6/B/3_weixin_30500663" username="weixin_30500663" alt="weixin_30500663" title="weixin_30500663"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="weixin_30500663" data-nick="weixin_30500663">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/weixin_30500663" target="_blank"><h5 class="oneline" title="weixin_30500663">weixin_30500663</h5></a></span>  <p></p><p class="article-num" title="4434篇文章"> 4434篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/zyxhangiian123456789" target="_blank"><img src="https://profile.csdnimg.cn/E/9/F/3_zyxhangiian123456789" username="zyxhangiian123456789" alt="CallMeJacky" title="CallMeJacky"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="zyxhangiian123456789" data-nick="CallMeJacky">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/zyxhangiian123456789" target="_blank"><h5 class="oneline" title="CallMeJacky">CallMeJacky</h5></a></span>  <p></p><p class="article-num" title="286篇文章"> 286篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/oAaronramsey" target="_blank"><img src="https://profile.csdnimg.cn/2/3/5/3_oaaronramsey" username="oAaronramsey" alt="ramsey_sjtu" title="ramsey_sjtu"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="oAaronramsey" data-nick="ramsey_sjtu">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/oAaronramsey" target="_blank"><h5 class="oneline" title="ramsey_sjtu">ramsey_sjtu</h5></a></span>  <p></p><p class="article-num" title="16篇文章"> 16篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/hhpingyear" target="_blank"><img src="https://profile.csdnimg.cn/0/D/4/3_hhpingyear" username="hhpingyear" alt="hhpingyear" title="hhpingyear"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="hhpingyear" data-nick="hhpingyear">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/huzhoudaxia/article/details/75269392&quot;}"><a href="https://blog.csdn.net/hhpingyear" target="_blank"><h5 class="oneline" title="hhpingyear">hhpingyear</h5></a></span>  <p></p><p class="article-num" title="18篇文章"> 18篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div></div>
				</div>
			</div>
		</div>
	</div>

花了20分钟,给女朋友们写了一个web版群聊程序

11-28 阅读数 19万+

参考博客[1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example 博文

14位享誉全球的程序员

09-04 阅读数 2万+

本文转载至:http://www.cricode.com/2922.html 博文 来自: 闲云孤鹤

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_61" data-pid="61"><iframe src="https://adaccount.csdn.net/#/preview/261?m=bctpJQQHEStciDEJyHEJctQmUHXciHDbiEJJXcHbbtAQWActipSpSnnEpnEyipSbnAptpDpbcfSptiiSLnQbnQUAHLcJnAAiQSAQ&amp;k=" scrolling="no" width="100%" height="75px" frameborder="0"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=bctpJQQHEStciDEJyHEJctQmUHXciHDbiEJJXcHbbtAQWActipSpSnnEpnEyipSbnAptpDpbcfSptiiSLnQbnQUAHLcJnAAiQSAQ"></div></div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_62" data-pid="62"><iframe src="https://adaccount.csdn.net/#/preview/848?m=AcfELiiAtvbAbStSSEHAppLDitinEADLJAJAyHLLAcfnQbvJHEipLJEXDHmLbfmHAQEipWcAvvtUAJQDmfHpApcbLnQLpttbbAJQ&amp;k=" scrolling="no" width="100%" height="75px" frameborder="0"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=AcfELiiAtvbAbStSSEHAppLDitinEADLJAJAyHLLAcfnQbvJHEipLJEXDHmLbfmHAQEipWcAvvtUAJQDmfHpApcbLnQLpttbbAJQ"></div></div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_63" data-pid="63"><script type="text/javascript">
    (function() {
        var s = "_" + Math.random().toString(36).slice(2);
        document.write('<div style="" id="' + s + '"></div>');
        (window.slotbydup = window.slotbydup || []).push({
            id: "u4221910",
            container: s
        });
    })();

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_64" data-pid="64"><script async="async" charset="utf-8" src="https://shared.ydstatic.com/js/yatdk/3.0.1/stream.js" data-id="8935aa488dd58452b9e5ee3b44f1212f" data-div-style="width:100%;" data-tit-style="margin-bottom: 6px; font-size: 18px; line-height: 24px; color: #3d3d3d;display: inline-block;font-weight:bold;" data-des-style="font-size: 13px; line-height: 22px; white-space: normal; color: #999;" data-img-style="float:left;margin-right:15px;width:90px;height:60px;" data-is-handling="1">

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_65" data-pid="65"><iframe src="https://adaccount.csdn.net/#/preview/670?m=pcDUHJpLtcUbAAptbmnLSSHcDySAyHLEAXvHAnEXpAyLbJAELJLQHQtSWAQAopntDpfvpLbtAnLUnSfmEnHpptDAApLAAQbbipbQ&amp;k=" scrolling="no" width="100%" height="75px" frameborder="0"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=pcDUHJpLtcUbAAptbmnLSSHcDySAyHLEAXvHAnEXpAyLbJAELJLQHQtSWAQAopntDpfvpLbtAnLUnSfmEnHpptDAApLAAQbbipbQ"></div></div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_66" data-pid="66"><script type="text/javascript">
    (function() {
        var s = "_" + Math.random().toString(36).slice(2);
        document.write('<div style="" id="' + s + '"></div>');
        (window.slotbydup = window.slotbydup || []).push({
            id: "u4623747",
            container: s
        });
    })();

爬虫福利二 之 妹子图网MM批量下载

01-03 阅读数 12万+

爬虫福利一:27报网MM批量下载    点击

看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成!

目标网站:妹子图网

环境:Python3.x




博文



那…


博文



html代码如下`<!DOCTY…


博文



<div class="recommend-item-box recommend-recommend-box"><div id="_wqhuho2uvgc"><div class="gauohyotpuity" style="display:none;margin-bottom:0px;"></div><iframe scrolling="no" src="//pos.baidu.com/s?hei=52&amp;wid=962&amp;di=u3491668&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fhuzhoudaxia%2Farticle%2Fdetails%2F75269392&amp;psi=dfbfdbf8974f0957233f2189e858fb2d&amp;dai=4&amp;pss=1349x13519&amp;prot=2&amp;psr=1366x768&amp;ti=OV7725%E6%91%84%E5%83%8F%E5%A4%B4%E7%9A%84%E5%BD%A9%E8%89%B2%E5%9B%BE%E5%83%8F%E9%87%87%E9%9B%86%E5%8E%9F%E7%90%86%E4%B8%8E%E6%B6%B2%E6%99%B6%E6%98%BE%E7%A4%BA%E3%80%8A%E4%B8%80%E3%80%8B&amp;ant=0&amp;cfv=0&amp;dtm=HTML_POST&amp;cmi=0&amp;ari=2&amp;cpl=0&amp;dc=3&amp;pis=-1x-1&amp;tpr=1579230922998&amp;pcs=1349x632&amp;cdo=-1&amp;cja=false&amp;dri=1&amp;dis=0&amp;ps=13051x380&amp;par=1366x728&amp;col=zh-CN&amp;exps=111000,110011&amp;ccd=24&amp;ltr=https%3A%2F%2Fblog.csdn.net%2Fm0_37170593%2Farticle%2Fdetails%2F73918403&amp;tcn=1579230923&amp;cce=true&amp;drs=1&amp;tlm=1579230923&amp;chi=1&amp;cec=UTF-8" width="962" height="52" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>

数据库优化 - SQL优化

11-01 阅读数 9万+

前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。



博文



rank
pl_
percentage

1
jav…


博文



<div class="recommend-item-box recommend-recommend-box"><div id="_uos77u8ok4g" style="width: 100%;"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=52&amp;wid=962&amp;di=u3491668&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fhuzhoudaxia%2Farticle%2Fdetails%2F75269392&amp;psi=dfbfdbf8974f0957233f2189e858fb2d&amp;psr=1366x768&amp;cpl=0&amp;ant=0&amp;ltr=https%3A%2F%2Fblog.csdn.net%2Fm0_37170593%2Farticle%2Fdetails%2F73918403&amp;cdo=-1&amp;cfv=0&amp;tpr=1579230922998&amp;ccd=24&amp;dc=3&amp;cce=true&amp;ti=OV7725%E6%91%84%E5%83%8F%E5%A4%B4%E7%9A%84%E5%BD%A9%E8%89%B2%E5%9B%BE%E5%83%8F%E9%87%87%E9%9B%86%E5%8E%9F%E7%90%86%E4%B8%8E%E6%B6%B2%E6%99%B6%E6%98%BE%E7%A4%BA%E3%80%8A%E4%B8%80%E3%80%8B&amp;par=1366x728&amp;ps=13524x380&amp;exps=111000,110011&amp;tlm=1579230923&amp;tcn=1579230923&amp;cec=UTF-8&amp;ari=2&amp;chi=1&amp;cmi=0&amp;pis=-1x-1&amp;dtm=HTML_POST&amp;dri=2&amp;dai=5&amp;dis=0&amp;col=zh-CN&amp;cja=false&amp;drs=1&amp;pss=1349x13578&amp;pcs=1349x632&amp;prot=2" width="962" height="52" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>

声明:本文不会下关于Mybatis和JPA两个持久层框架…


博文



问题描述:编号为 1-N 的 N …


博文



“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作

11-13 阅读数 10万+

一、垃圾文字生成器介绍

最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。

项目中文名:狗屁不通文章生成器
项目英文名:BullshitGenerator
根据作…


博文



前言
这一期不算…


博文



区块链技术被认为…


博文



程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址

11-17 阅读数 14万+

第一幕:缘起

听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员……

996程序员做的梦:

第一场:团队招募

为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是…


博文



本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法…


博文



日均350000亿接入量,腾讯TubeMQ性能超过Kafka

11-19 阅读数 6842

    ...</span>
		</a>
		<span class="blog_title_box oneline no-title">
								<span class="type-show type-show-blog type-show-after">博文</span>
											</span>
	</p>
</div>
</div>

8年经验面试官详解 Java 面试秘诀

11-19 阅读数 5万+

 

作者 | 胡书敏

责编 | 刘静

出品 | CSDN(ID:CSDNnews)

本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官…


博文



面试官如何考察你的思维方式?

11-19 阅读数 3万+

    ...</span>
		</a>
		<span class="blog_title_box oneline no-title">
								<span class="type-show type-show-blog type-show-after">博文</span>
											</span>
	</p>
</div>
</div>

so easy! 10行代码写个"狗屁不通"文章生成器

11-20 阅读数 6万+

         ...</span>
		</a>
		<span class="blog_title_box oneline no-title">
								<span class="type-show type-show-blog type-show-after">博文</span>
											</span>
	</p>
</div>
</div>

走进高并发(二)Java并行程序基础

11-22 阅读数 1万+

一、进程和线程 在操作系统这门课程中,对进程的定义是这样的:

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机…


博文



张小龙-年薪近3亿的微信之父,他是如何做到的?

11-22 阅读数 8万+

张小龙生于湖南邵东魏家桥镇,

家庭主要特点:穷。

不仅自己穷,亲戚也都很穷,可以说穷以类聚。爷爷做过铜匠,总的来说,标准的劳动阶级出身。

家有兄弟两人,

一个小龙,一个小虎。

小虎好动,与邻…


博文



西游记团队中如果需要裁掉一个人,会先裁掉谁?

11-23 阅读数 4万+

2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图:

裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢?
我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁…


博文



iOS Bug 太多,苹果终于坐不住了!

11-23 阅读数 4万+

开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢?

整理 | 屠敏

出品 | CSDN(ID:CSDNnews)

毋庸置疑,当前移动设备操作系统市场中,Android …


博文



上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。
我接的私活不算多,挣到的…


博文



(一)初进校园

刚进入大学的时候自己完全…


博文



回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“一地…


博文



                <div class="recommend-item-box type_hot_word">
                <div class="content clearfix" style="width: 852px;">
                    <div class="float-left">
                                                                            <span>
                            <a href="https://blog.csdn.net/yilovexing/article/details/80577510" target="_blank">
                            python</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/slwbcsdn/article/details/53458352" target="_blank">
                            json</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/csdnnews/article/details/83753246" target="_blank">
                            java</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/qq_35077512/article/details/88952519" target="_blank">
                            mysql</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/pdcfighting/article/details/80297499" target="_blank">
                            pycharm</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/sinyu890807/article/details/97142065" target="_blank">
                            android</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/gexiaoyizhimei/article/details/100122368" target="_blank">
                            linux</a>
                        </span>
                                                    <span>
                            <a href="https://download.csdn.net/download/xhg_gszs/10978826" target="_blank">
                            json格式</a>
                        </span>
                                                
                                                                            <span>
                            <a href="https://www.csdn.net/gather_10/MtTaAgxsNi1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# grid 总行数</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_15/MtTaAgxsNy1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# web浏览器插件</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_1e/MtTaAgxsOC1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# xml 生成xsd</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_10/MtTaAgxsOS1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# 操作sql视图</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_16/MtTaAgysMC1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            java调用c#接口</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_10/MtTaAgysMS1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# 二维布尔数组</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_19/MtTaAgysMi1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# 增加元素</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_1c/MtTaAgysMy1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c#控制台简单加法</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_10/MtTaAgysNC1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# 服务端框架</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_18/MtTaAgysNS1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                            c# 判断事件是否注册</a>
                        </span>
                                                                        </div>
                </div>
                </div>
                                <div class="recommend-loading-box">
                <img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
            </div>
            <div class="recommend-end-box" style="display: block;">
                <p class="text-center">没有更多推荐了,<a href="https://blog.csdn.net/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
            </div>
        </div>
                        <div class="template-box">
                <span>©️2019 CSDN</span><span class="point"></span>
            <span>皮肤主题: 编程工作室</span>
            <span> 设计师:
                                        CSDN官方博客                                    </span>
            </div>
                </main>
发布了0 篇原创文章 · 获赞 0 · 访问量 61

前言:
摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D[1] (模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再传输给其他显示硬件就可以显示看到图像了
我要讲解的是0V7725摄像头,带FIFO缓存,以及通过STM32F103MCU进行控制,在采用ILI9341控制器芯片的液晶屏(分辨率240*320)上显示。
我会分两大板块介绍:
第一是摄像头图像数据采集的过程
第二是图像数据在液晶屏上显示的过程
摄像头图像数据采集
以下是要讲的几个小点:
0.OV7725的摄像头结构
1.摄像头(实际上是图像传感器在采集)采集图像获得图像数据(是怎么样获得彩色信息数据的呀这个我比较关心与好奇)是怎样的一个过程。
2.摄像头(从硬件电路上讲是0V7725芯片在传输数据)将数据传输给FIFO(起数据缓冲的作用)的过程是个什么样的过程。
3.(由数字电路基础知,硬件电路上传输数据是需要时钟的)通过什么时序,该时序又是什么样的。
5.然后根据程序讲解,引脚间的连接与配置。
6.然后根据程序讲解ov7725的芯片初始化过程。
0>OV7725摄像头的结构:
晶振、板载电路、镜头、FIFO存储器(AL422B芯片)、CMOS数字图像传感器(Ov7725CMOS感光芯片)、DSP数字算法处理芯片(用于处理采集到的图像数据)
结构功能介绍:
CMOS图像传感器:首先什么是CMOS图像传感器,CMOS图像传感器通常由像敏单元阵列、行驱动器、列驱动器、时序控制逻辑、AD转换器、数据总线输出接口、控制接口等几部分组成,这几部分通常都被集成在同一块硅片上。其工作过程一般可分为复位、光电转换、积分、读出几部分。
我们采用的该Ov7725图像传感器的像素30万,分辨率:480*640支持使用 VGA 时序输出图像数据,也支持QVGA时序输出240*320(本实验为了妥协FIFO的存储量,只能存储一帧该分辨率大小的图形,而且我们的屏幕也是240*320的显示分辨率),输出图像的数据格式支持 YUV(422/420)(这个后面会介绍)、 YCbCr422(这个后面会介绍) 以及 RGB565 格式。它还可以对采集得到的图像进行补偿,支持伽玛曲线、 白平衡、饱和度、色度等基础处理(这些处理为什么明明不懂我还要说,因为程序配置时你会发现一些莫名其妙的配置,我们虽然不用,但是我们要配成不用,所以那些莫名其妙的程序就是对此的配置)
DSP数字算法处理芯片:这个部分就是OV7725芯片中的结构,单独提出来知识为了便于我们对结构的理解。
FIFO存储器:接收图像传感器传过来的图像数据。

猜你喜欢

转载自blog.csdn.net/zhuoqianxun/article/details/104016800