在Ubuntu下调用opencv库编程显示一张图片并显示字符数据

本文介绍了在Ubuntu系统中利用opencv库编程显示汉字和字符数据的方法。首先,讲述了汉字点阵字库的原理,包括区位码和机内码的概念。然后,详细阐述了如何通过区位码或机内码获取汉字点阵。最后,提供了在Ubuntu环境下创建文件夹、放入所需文件、编写代码以及运行显示字符数据在图片上的步骤。
摘要由CSDN通过智能技术生成

汉字点阵字库原理

汉字编码

1、区位码

在国标 GD2312—80 中规定,所有的国标汉字及符号分配在一个 94 行、94 列的方阵中,方阵的每一行称为一个“区”,编号为 01 区到 94 区,每一列称为一个“位”,编号为01 位到 94 位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是 3624,表明它在方阵的 36 区 24 位,问号“?”的区位码为0331,则它在 03 区 31位。

2、机内码

汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。如上所述,汉字区位码的区码和位码的取值均在 1-94 之间,如直接用区位码作为机内码,就会与基本 ASCII 码混淆。为了避免机内码与基本 ASCII 码的冲突,需要避开基本 ASCII 码中的控制码(00H~1FH),还需与基本 ASCII 码中的字符相区别。为了实现这两点,可以先在区码和位码分别加上 20H,在此基础上再加 80H(此处“H”表示前两位数字为十六进制数)。经过这些处理,用机内码表示一个汉字需要占两个字节,分别 称为高位字节和低位字节,这两位字节的机内码按如下规则表示:
高位字节 = 区码 + 20H + 80H(或区码 + A0H)
低位字节 = 位码 + 20H + 80H(或位码 + AOH)

由于汉字的区码与位码的取值范围的十六进制数均为 01H-5EH(即十进制的 01-94),所以汉字的高位字节与低位字节的取值范围则为 A1H~FEH(即十进制的 161-254)。
例如,汉字“啊”的区位码为 1601,区码和位码分别用十六进制表示即为 1001H,它的机内码的高位字节为 B0H,低位字节为 A1H,机内码就是 B0A1H。

点阵字库结构

在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0 代表没有,1 代表有点,将 0 和 1 分别用不同颜色画出,就形成了一个汉字,常用的点阵矩阵有 12x12, 14x14, 16x16 三种字库。字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都是横向矩阵的存储方式(用得最多的应该是早期 UCDOS 字库),纵向矩阵一般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库矩阵做成纵向,省得在显示时还要做矩阵转换。我们接下去所描述的都是指横向矩阵字库。在此实验里,我们运用的点阵矩阵为24x24的字库。

汉字点阵获取

1、利用区位码获取汉字

汉字点阵字库是根据区位码的顺序进行存储的,因此,我们可以根据区位来获取一个字库的点阵,它的计算公式如下:
点阵起始位置 = ((区码- 1)x94 + (位码 – 1)) x 汉字点阵字节数
获取点阵起始位置后,我们就可以从这个位置开始,读取出一个汉字的点阵。

2、利用汉字机内码获取汉字

前面我们己经讲过,汉字的区位码和机内码的关系如下:
机内码高位字节 = 区码 + 20H + 80H(或区码 + A0H)
机内码低位字节 = 位码 + 20H + 80H(或位码 + AOH)

反过来说,我们也可以根据机内码来获得区位码:
区码 = 机内码高位字节 - A0H
位码 = 机内码低位字节 - AOH

将这个公式与获取汉字点阵的公式进行合并计就可以得到汉字的点阵位置。

Ubuntu 下调用 opencv 在图片显示字符数据

1、创建文件夹

在虚拟机中调取终端,输入指令:mkdir word 创建一个名为word的文件夹;
输入指令:cd word,进入该文件夹;
在这里插入图片描述

2、放入文件

将需要的项目文件放入该文件夹中,其中包括24 点阵汉字库(宽度 x 高度 = 24x24)、16 点阵 ASCII 字库(宽度 x 高度 = 8x16)以及需要显示的字符数据的文本文件和需要显示的图片。
在这里插入图片描述

3、编写代码

输入指令:gedit test.cpp,创建一个cpp文件来编写代码:
在这里插入图片描述
代码编写:

#include<iostream>
#include<opencv/cv.h>
#include"opencv2/opencv.hpp"
#include<opencv/cxcore.h>
#include<opencv/highgui.h>
#include<math.h>

using namespace cv;
using namespace std;

void paint_chinese(Mat& image,int x_offset,int y_offset,unsigned long offset);
void paint_ascii(Mat& image,int x_offset,int y_offset,unsigned long offset);
void put_text_to_image(int x_offset,int y_offset,String image_path,char* logo_path);

int main(){
   
    String image_path="IMG_20211104_134252.jpg";//图片的名字
    char* logo_path="logo.txt";//汉字文件的名字
    put_text_to_image(700,700,image_path,logo_path);//change txt place
    return 0;
Ubuntu系统中使用VSCode结合OpenCV加载并显示图片的步骤如下: 1. 确保你的Ubuntu系统中已经安装了OpenCV。如果未安装,可以通过终端使用包管理器进行安装,例如使用`sudo apt-get install libopencv-dev`。 2. 安装VSCode,如果已经安装,确保安装了C++和Python的扩展,以便于编写和运行代码。 3. 打开VSCode,创建一个新的C++文件,比如命名为`main.cpp`。 4. 编写代码,以下是一个简单的示例代码,展示如何使用OpenCVUbuntu下加载并显示图片: ```cpp #include <opencv2/opencv.hpp> #include <iostream> int main() { // 图片路径,请根据实际情况进行修改 cv::String image_path = "/path/to/your/image.jpg"; // 使用cv::imread函数读取图片 cv::Mat image = cv::imread(image_path, cv::IMREAD_COLOR); if(image.empty()) { std::cout << "图片加载失败" << std::endl; return -1; } // 使用cv::imshow函数显示图片 cv::imshow("显示窗口", image); // 等待按键,设置等待时间为任意正数,这里设置为0表示无限等待 cv::waitKey(0); return 0; } ``` 5. 确保你的编译器配置正确,并且能够在终端中使用g++编译器。在VSCode中,你可以通过运行配置或任务来指定编译器和编译参数。 6. 编译代码,如果一切配置正确,你应该能够编译出可执行文件。 7. 运行编译出的程序,如果图片路径正确,你将看到一个窗口显示了加载的图片。 8. 在图片窗口中点击任意键,程序将结束并关闭窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值