目录

一 在笔记本电脑之间用sub转ttl线链接并用串口调试助手发送文件至另一台电脑

二 在虚拟机上用opencv显示图片以及文字

三 总结

四参考文献


一 在笔记本电脑之间用sub转ttl线链接并用串口调试助手发送文件至另一台电脑

现在电脑上打开串口调试助手,然后双方链接出usb转ttl,接法是rxd接txd,txd接Rxd。然后在串口调试助手里面调试相应的串口设置,双方要相同的设置。我和另外一个室友相互发送txt文件获得出一下结果

这是我发送文件的结果,显示发送成功。

这是我接受文件的结果,文件内的内容为你好呀。

如上得出相应文件里面的内容。但是图片等大的文件就会出现一定的乱码。

二 在虚拟机上用opencv显示图片以及文字

新建一个名为logo的文本文件,然后里面输入自己的学号和名字

然后新建一个名为word.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="bird.jpg";//图片的名字char* logo_path="logo.txt";//汉字文件的名字put_text_to_image(200,350,image_path,logo_path);//change txt placereturn 0;
}void paint_ascii(Mat& image,int x_offset,int y_offset,unsigned long offset){//绘制的起点坐标Point p;p.x = x_offset;p.y = y_offset;//存放ascii字膜char buff[16];           //打开ascii字库文件FILE *ASCII;if ((ASCII = fopen("Asci0816.zf", "rb")) == NULL){printf("Can't open ascii.zf,Please check the path!");//getch();exit(0);}fseek(ASCII, offset, SEEK_SET);fread(buff, 16, 1, ASCII);int i, j;Point p1 = p;for (i = 0; i<16; i++)                  //十六个char{p.x = x_offset;for (j = 0; j < 8; j++)              //一个char八个bit{p1 = p;if (buff[i] & (0x80 >> j))    /*测试当前位是否为1*/{/*由于原本ascii字膜是8*16的,不够大,所以原本的一个像素点用4个像素点替换,替换后就有16*32个像素点ps:感觉这样写代码多余了,但目前暂时只想到了这种方法*/circle(image, p1, 0, Scalar(0, 0, 255), -1);p1.x++;circle(image, p1, 0, Scalar(0, 0, 255), -1);p1.y++;circle(image, p1, 0, Scalar(0, 0, 255), -1);p1.x--;circle(image, p1, 0, Scalar(0, 0, 255), -1);}                       p.x+=2;            //原来的一个像素点变为四个像素点,所以x和y都应该+2}p.y+=2;}
}
void paint_chinese(Mat& image,int x_offset,int y_offset,unsigned long offset){//在图片上画汉字Point p;p.x=x_offset;p.y=y_offset;FILE *HZK;char buff[72];//72个字节,用来存放汉字的if((HZK=fopen("HZKf2424.hz","rb"))==NULL){printf("Can't open HZKf2424.hz,Please check the path!");exit(0);//退出}fseek(HZK, offset, SEEK_SET);/*将文件指针移动到偏移量的位置*/fread(buff, 72, 1, HZK);/*从偏移量的位置读取72个字节,每个汉字占72个字节*/bool mat[24][24];//定义一个新的矩阵存放转置后的文字字膜int i,j,k;for (i = 0; i<24; i++)                 /*24x24点阵汉字,一共有24行*/{for (j = 0; j<3; j++)                /*横向有3个字节,循环判断每个字节的*/for (k = 0; k<8; k++)              /*每个字节有8位,循环判断每位是否为1*/if (buff[i * 3 + j] & (0x80 >> k))    /*测试当前位是否为1*/{mat[j * 8 + k][i] = true;          /*为1的存入新的字膜中*/}else {mat[j * 8 + k][i] = false;}}for (i = 0; i < 24; i++){p.x = x_offset;for (j = 0; j < 24; j++){     if (mat[i][j])circle(image, p, 1, Scalar(255, 0, 0), -1);         //写(替换)像素点p.x++;                                                //右移一个像素点}p.y++;                                                    //下移一个像素点}
}void put_text_to_image(int x_offset,int y_offset,String image_path,char* logo_path){//将汉字弄上图片
//x和y就是第一个字在图片上的起始坐标//通过图片路径获取图片Mat image=imread(image_path);int length=17;//要打印的字符长度(打印多少字节长度就为多少,根据自己的情况调整)unsigned char qh,wh;//定义区号,位号unsigned long offset;//偏移量unsigned char hexcode[30];//用于存放记事本读取的十六进制,记得要用无符号FILE* file_logo;if ((file_logo = fopen(logo_path, "rb")) == NULL){printf("Can't open txtfile,Please check the path!");//getch();exit(0);}fseek(file_logo, 0, SEEK_SET);fread(hexcode, length, 1, file_logo);int x =x_offset,y = y_offset;//x,y:在图片上绘制文字的起始坐标for(int m=0;m<length;){if(hexcode[m]==0x23){break;//读到#号时结束}else if(hexcode[m]>0xaf){qh=hexcode[m]-0xaf;//使用的字库里是以汉字啊开头,而不是以汉字符号开头wh=hexcode[m+1] - 0xa0;//计算位码offset=(94*(qh-1)+(wh-1))*72L;paint_chinese(image,x,y,offset);/*计算在汉字库中的偏移量对于每个汉字,使用24*24的点阵来表示的一行有三个字节,一共24行,所以需要72个字节来表示*/m=m+2;//一个汉字的机内码占两个字节,x+=24;//一个汉字为24*24个像素点,由于是水平放置,所以是向右移动24个像素点}else{//当读取的字符为ASCII码时wh=hexcode[m];offset=wh*16l;//计算英文字符的偏移量paint_ascii(image,x,y,offset);m++;//英文字符在文件里表示只占一个字节,所以往后移一位就行了x+=16;}}cv::imshow("image", image);cv::waitKey();
}

然后准备好两个已有文件和需要的图片,图片必须和以上代码中定义的名字相呼应。如下

然后对写好的cpp文件进行编译

g++ word.cpp -o word `pkg-config --cflags --libs opencv`

编译成功后,当直接出现命令行且没报错时即编译成功了,然后在终端运行./word,得出以下结果

需要注意的是前面的代码里面有一行是length=17,这里代表的是数据的长度,要根据自己所需要的位数定义,不然会出现乱码目前还没处理好这个问题

三 总结

本次实验实作了用串口在双方的笔记本上发送相应的文件并接收,知道了可以通过串口调试助手和串口及杜邦线在双方主机上通过串口发送数据文件。然后在虚拟机里面用OpenCV显示汉字和数字图片,参考了网上大佬的代码和实作方法后在询问明白的同学后得出自己的结果,初步使用中文点阵字库文件得出如上所示。

四参考文献

https://blog.csdn.net/qq_46467126/article/details/121313820?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163706448416780265453885%2522%252C%2522scm%2522%253A%252220140713.130102334.wap%255Fall.%2522%257D&request_id=163706448416780265453885&biz_id=0&utm_medium=distribute.wap_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-4-121313820.wap_first_rank_v2_rank_v29&utm_term=%E7%82%B9%E9%98%B5%E5%AD%97%E6%A8%A1%E7%9A%84%E8%AF%BB%E5%8F%96%E4%B8%8E%E6%98%BE%E7%A4%BA&spm=1018.2118.3001.4187

在主机之间进行串口互传以及用opencv显示图片及文字相关推荐

  1. winxp 连接linux ftp,Linux和XP之间使用FTP互传文件

    Linux和XP之间使用FTP互传文件 发布时间:2007-09-05 00:57:57来源:红联作者:rganizati 今天第一次付诸于行动,发现其实很简单,跟我们正常的两台Windows XP系 ...

  2. 使用SSH完成linux和windows之间的文件互传(linux端)

    使用SSH完成linux和windows之间的文件互传(linux端) 参考链接 通过OpenSSH完成linux和Win10文件互传 最近项目需求,需要linux和windows端进行文件互传,lo ...

  3. Android向:实现同一局域网内两台手机之间的文件互传

    背景 最近要做一个demo,目的是实现局域网内的两台手机之间的文件互传.具体流程如下: 手机 A 从服务器上下载一个 apk 文件到本机上: 手机 A 在自己的某个端口上启动一个 Server 服务, ...

  4. 物理机与虚拟机之间的文件互传

    现在的服务器平台架构基本上都是集群模式,集群里的每一台物理机又可以虚出来很多虚拟机,层层叠进,那么物理机与虚拟机之间如何文件互传呢 由于单纯的物理机的性质只是存储服务器,虚拟机要想获取物理机上的文件, ...

  5. 麒麟快传,实现Linux,Windows,MacOS之间文件便捷互传的软件

    麒麟快传官网:https://qianqianjun.github.io/qilintransfer/ 本博客安利一下麒麟快传,一款局域网跨平台文件安全传输软件,支持在Windows,Linux,Ma ...

  6. 如何将两部手机内容互换_两部iPhone手机之间如何大量互传照片?

    不少iPhone用户在传照片的时候,都会第一时间打开微信进行操作.微信传照片是不错,但是单次最多只能发9张照片,而且接收的那一方,在接收照片之后还要手动把照片保存到手机上,效率低所以不适合大量传照片. ...

  7. 在计算机之间怎样进行软件传送,什么软件可以实现两台电脑之间的文件互传呢...

    满意答案 yewan969 推荐于 2018.07.27 采纳率:57%    等级:9 已帮助:2362人 1.简单易行,借助QQ等通讯工具.在两台电脑上分别登陆两个不同的QQ,直接把文件拖动到聊天 ...

  8. 【电脑使用】电脑之间文件无线互传

    文章目录 一.说明 二.准备 三.共享 四.复原 五.总结 /* 2021.8.7 更新 */ 六.文件传输网站总结    一般来说,电脑之间想要实现文件交互,一般需要使用媒介,比如U盘.移动硬盘等, ...

  9. picgo 上传成功,无法显示图片

    picgo + 腾讯云踩坑记录 将图片上传云端,方便访问,在安装时遇到到了一些问题,在这里记录解决的办法.首先我的使用场景是 typora ,将图片上传云端,在发布分享笔记时就无需重新上传本地图片了! ...

最新文章

  1. c语言使单片机输出低电平,单片机开发中的一些实用技巧
  2. Windows API 的数据类型与 Delphi 数据类型对照表
  3. db2 之 入门实验
  4. 【多线程高并发】深入浅出JMM-Java线程内存模型
  5. 我们怎样确保从大数据计算中获得价值
  6. windows安装多个jdk版本的切换问题
  7. 8、kubernetes之存储卷资源
  8. 全局变量反汇编与重定位
  9. ROS安装教程(ubuntu18.04+melodic版本)
  10. 利用seven 7zip的API来进行压缩和解压文件夹
  11. setcpu_SetCpu Android超频工具
  12. 消逝的光芒 Dying Light for Mac 跑酷僵尸游戏 动作生存游戏
  13. cordic ip核 vivado_Xilinx Vivado CORDIC IP核求解atan 反正切
  14. Unity颜色转换(HtmlString和Color)
  15. Pyhton零基础投喂(综合练习:1.论⽂数据统计)
  16. [DP] 【UNR #2】积劳成疾
  17. 简单实现敏感词过滤功能
  18. 【GNSS】抗差估计(稳健估计)原理及程序实现
  19. 用户体验为什么重要?如何提升产品的用户体验?(写给产品小白)
  20. 立冬出生的宝宝取名大全测试打分准不准

热门文章

  1. 慧数汽车大数据:中国轿跑/运动型SUV市场研究报告(2018简版)
  2. MCU做Machine Learning识别技术
  3. Sketch for mac(矢量绘图设计软件)
  4. 人工智能与人类智慧的较量
  5. 杂文 | 自媒体创业泡沫消亡史
  6. 清华大学计算机夏文韬,2016安徽综合评价入围考生名单公示
  7. 小升初报名修改密码出现内部服务器错误,小升初报名表填写错了怎么办
  8. 全国计算机等级考试报名照片存储要求怎么弄
  9. 网易中间件Cetus开源啦
  10. 以点破面——JVM内存区域