Ubuntu下利用opencv库编程显示图片以及插入姓名学号

Ubuntu下利用opencv库编程显示图片以及插入姓名学号

一、什么是汉字点阵

1.1 汉字点阵介绍

点阵显示是一种显示技术,它通过把图像或字符分解成由点组成的矩阵,每个点都被看作一个像素,通过控制每个像素的状态(亮或暗)来在屏幕上呈现出图像或字符。这种显示技术广泛应用于各种显示设备和场景,用于显示文本、图标、图像等内容,以实现丰富多彩的显示效果。在嵌入式系统中,点阵显示被用于显示汉字、图标、进度条等信息,以及提供用户交互界面。通过合适的字模数据和控制算法,可以实现高质量、高效率的点阵显示效果,提高用户的视觉体验。
在这里插入图片描述
如图是一个16x16的点阵图,可以用来表示一个256像素点的图像或者字符。显示的文字是“汉”,可以看到图中的黑点处代表亮处,白点处代表黑处。通常用电平“1”表示亮,电平“0”表示暗。
点阵显示广泛应用于各种设备和场景,例如LED显示屏、LCD显示屏和OLED显示屏等。它们被用于显示文本、图标、图像等内容。通过控制每个像素的状态,点阵显示可以实现多种多样的图形和字符显示效果。
在这里插入图片描述
在51单片机中曾经也遇到过点阵,是一个8x8的点阵,由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则1脚接高电平a脚接低电平,则第一个点就亮了。

1.2 汉字点阵取模软件以及取模过程

在keil的之前OLED编程中,我们并没有涉及到中文库的显示,之前给的OLED驱动模块也仅仅只有英文字库,但现在可以通过汉字取模软件获得字符的点阵编码,从而能够在OLED上成功显示汉字 。
汉字取模软件安装包
链接:https://pan.baidu.com/s/1ZSrDvhP-mwLQB9F0X_uLlQ
提取码:1234
安装解压后,打开第一个文件,后面两张图是设置流程,这里我就不再多说了
在这里插入图片描述
打开“PCtoLCD2002”,点击设置(同时注意大小为16x16)
在这里插入图片描述
按照以下进行设置
在这里插入图片描述
然后在主页输入文字,点击生成字模,就可以获得对应的字符代码了,需要用的时候把它加入到OLED的配置代码就可以了。
在这里插入图片描述

二、汉字机内码、区位码以及两者之间的关系

2.1 区位码

在中国的国家标准GD2312-80中,规定所有的国家标准汉字及符号被分配在一个94行、94列的方阵中。这个方阵的每一行被称作一个“区”,编号从01区到94区,每一列被称作一个“位”,编号从01位到94位。这个方阵中的每一个汉字和符号的区号和位号组合起来,形成了四个阿拉伯数字,这就是它们的“区位码”。区位码的前两位是区号,后两位是位号。通过使用区位码,我们可以唯一地确定一个汉字或符号。反之,任何一个汉字或符号也都对应着一个唯一的区位码。

举例来说,如果某个汉字的区位码是3624,这表明这个汉字位于方阵的36区24位。同样地,问号“?”的区位码是0331,这表明问号位于03区的第31位。

通过这样的方式,我们可以把每一个汉字和符号在方阵中找到它们的位置。这不仅帮助我们唯一地标识和查找这些字符,也使得计算机能够处理和显示这些汉字和符号。

这种区位码系统是汉字编码的一种常见方式,它使得每个汉字在计算机中都有了一个唯一的标识。无论是中文文本的输入、存储、传输,还是中文文本的处理、检索、显示等操作,都可以通过区位码来进行高效的管理和操作。

对于需要进行汉字处理的应用程序或系统,了解并正确使用区位码是非常重要的。因为只有通过正确的区位码,我们才能找到并处理所需的汉字。同时,对于需要处理大量文本的情况,了解并使用这种编码方式可以提高处理效率,减少错误,并使得文本处理更为准确和可靠。

2.2 机内码

在计算机中表示一个汉字需要进行编码,这个编码称为机内码。与区位码相比,机内码的表示方式稍有不同。由于汉字区位码的区码和位码的取值范围都在1~94之间,如果直接将区位码作为机内码,就会与基本ASCII码混淆。因此,为了在计算机中表示汉字,需要使用一种称为机内码的编码方式。机内码的常见编码方式包括Unicode和GBK。

为了避免机内码与基本ASCII码中的控制码(00H~1FH)冲突,同时还要与基本ASCII码中的字符相区别,需要对区码和位码进行处理。具体来说,可以在区码和位码的基础上分别加上20H,然后再分别加上80H。这样处理后,每个汉字的机内码就可以占用两个字节的高位字节和低位字节来表示。

这两位字节的机内码按如下规则表示: 高位字节= 区码+20H+80H(或区码+A0H) 低位字节= 位码+20H+80H(或位码+AOH)

高位字节的取值范围为A1H-FEH,低位字节的取值范围也为A1H-FEH。这个范围对应的十进制数为161-254,因此汉字的高位字节和低位字节的取值范围为161~254。

以汉字“啊”为例,其区位码为1601,即十进制的1001。为了将其转换为机内码,需要在区码和位码的基础上分别加上20H和80H。这样处理后,汉字“啊”的高位字节为B1H,低位字节为A1H。
在这里插入图片描述
总之,通过将区位码转换为机内码的方式,可以在计算机中正确地表示和存储汉字信息。每个汉字占用两个字节的机内码,高位字节和低位字节的取值范围均为A1H~FEH。这种编码方式不仅可以避免与基本ASCII码的冲突,还可以与其他字符进行区别。

三、汉字字符存储格式

字形数据存储格式有多种,包括但不限于以下几种:

  • ASCII码:这是最早的字符编码标准,使用7位或8位二进制数表示128个或256个字符。其中,扩展的ASCII码使用8位二进制数表示256个字符。

  • Unicode:这是一种全面的字符编码标准,使用16位二进制数表示字符,可以表示超过6万个字符,涵盖了世界上几乎所有的文字和符号。Unicode有多种编码方式,包括UTF-8、UTF-16和UTF-32等。

  • UTF-8:这是一种可变长度的编码方式,使用8位、16位或32位的二进制数表示字符,根据字符的不同而变化长度。UTF-8编码方式兼容ASCII码,即ASCII码中的字符使用1个字节表示,而其他字符使用多个字节表示。

  • UTF-16:这是一种固定长度的编码方式,使用16位的二进制数表示字符,每个字符都使用2个字节表示。UTF-16编码方式也兼容ASCII码,只需要使用一个字节存储ASCII码字符。

  • UTF-32:这是一种固定长度的编码方式,使用32位的二进制数表示字符,每个字符都使用4个字节表示。UTF-32编码方式不兼容ASCII码,每个字符都占用4个字节的存储空间。

    在计算机中存储字形数据时,需要使用相应的编码方式进行编码,以便在计算机中进行存储和传输。在实际应用中,通常使用UTF-8编码方式存储字符型数据,因为它既可以表示所有的Unicode字符,又能节省存储空间。

四、实验

4.1 本实验所用到的所有软件链接

opencv下载网站(虚拟机中进行):https://opencv.org/releases/
Ubuntu虚拟机下载(具体过程请搜索以下博客):https://blog.csdn.net/m0_55704585/article/details/121867341
中文字库
链接:https://pan.baidu.com/s/1lRIyXdj5WjJcGOqIRZCS_Q?pwd=0231
提取码:0231

4.2 opencv安装过程

首先,在终端挨个输入以下代码进行配置

sudo apt install -y g++
sudo apt install -y cmake
sudo apt install -y make
sudo apt install -y wget
sudo apt install -y unzip
//安装依赖项目
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
//安装OpenCV依赖的基本库

进行完毕后,我们通过上述网站通过虚拟机的浏览器进行下载
在这里插入图片描述
下载好后,提取到主目录中,并把文件名改为“opencv”。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
右键点击从终端打开
在这里插入图片描述
打开终端后,在opencv目录下创建一个build文件并进入它

mkdir build
cd build

在这里插入图片描述
随后依次输入以下代码

cmake …(只有两个点)
make -j4
sudo make install

此安装时间较长,请耐心等待。
在这里插入图片描述
安装完成后,可以使用“locate opencv”查看文件路径,判断是否安装好了
在这里插入图片描述

4.3 文件导入

我们准备四个文件

  1. 想要显示的图片
  2. 24x24的点阵hz文件(在中文字库里)
  3. ASCII码的.zf文件(在中文字库里)
  4. 插入的文字文本文档(txt)
    在虚拟机主目录下创建一个“wordsandpictures”文件夹
    将四个文件复制粘贴到这个文件夹里(一定要注意文件名字,像我这样改,否则会出错)
    在这里插入图片描述

4.4 代码写入以及编译

我们以终端方式打开“wordsandpictures”文件夹
在这里插入图片描述

利用vim编辑器创建一个”word.cpp“文件

vim word.cpp

在word.cpp里编写如下程序

#include<opencv2/opencv.hpp>
#include "opencv2/core/core_c.h"

//#include "opencv2/core/core_c.h"
//#include "opencv2/imgproc/imgp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值