当前位置: 首页 > news >正文

RV1126 NO.44:OPENCV的cvtColor和putText的讲解

一.cvtColor的用处和API讲解

1.1 cvtColor函数简介

cvtColor是OpenCV中用于图像颜色空间转换的核心函数,支持多种颜色模式间的相互转换。该函数能够实现包括RGB转灰度图、灰度图转RGB、RGB转HSV等多种常见颜色空间转换。

1.2 cvtColor函数API

CV_EXPORTS_W void cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);

参数说明:

  • src:输入图像数据
  • dst:输出图像数据
  • code:颜色空间转换标识符
  • dstCn:目标图像通道数,默认为0

支持11大类颜色空间转换:

  1. RGB↔BGR
  2. RGB→5X5
  3. RGB↔GRAY
  4. RGB↔CIEXYZ
  5. RGB↔YCrCb(YUV)
  6. RGB↔HSV
  7. RGB↔HLS
  8. RGB↔CIELab
  9. RGB↔CIELuv
  10. RGB↔Bayer
  11. YUV420↔RGB

1.3.用代码实现cvtColor的颜色转换功能

这次代码主要是转换几个常见的格式,如RGB->YUV, YUV->RGB。具体的代码思路如下:

这个代码里面我们分别读取两种图片,一种是RGB图片、另外一种是YUV灰度图像、分别用cvtColor把RGB图像转换成YUV图像、把YUV灰度图像转换成RGB图像、最后用imwrite保存两种图片。下面是一些代码的实现:

1.3.1调用imread读取RGB彩色图像
    Mat car_image = imread("car.png");if(car_image.empty()){perror("can not find this picture:\n");return -1;}

读取RGB彩色通道的图像,这张图片是一张车辆的图片

1.3.2.把RGB图像转换为YUV图像
    Mat yuv_procss_car_image;cvtColor(car_image,yuv_procss_car_image,COLOR_RGB2YUV);

调用cvtColor把三通道的RGB图像转换为YUV的灰度图像,这里使用的是COLOR_RGB2YUV。

​​​​​​​1.3.3.调用imread读取YUV灰度图像
    Mat yuv_car_image = imread("yuv_car.png");if(car_image.empty()){perror("can not find this picture:\n");return -1;}

读取YUV的灰度图像,这张图片是一张灰度的汽车图像

​​​​​​​1.3.4.把YUV图像转换为RGB图像
    Mat rgb_procss_car_image;cvtColor(car_image,rgb_procss_car_image,COLOR_RGB2YUV);

调用cvtColor把单通道的图像转换成RGB图像,调用的选项使用的是COLOR_YUV2RGB

​​​​​​​1.3.5.把处理过后的两种图像保存
    imwrite("yuv_procss_car_image.jpg",yuv_procss_car_image);imwrite("rgb_procss_car_image.jpg",rgb_procss_car_image);

完整代码:
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Mat car_image = imread("car.png");if(car_image.empty()){perror("can not find this picture:\n");return -1;}Mat yuv_procss_car_image;cvtColor(car_image,yuv_procss_car_image,COLOR_RGB2YUV);Mat yuv_car_image = imread("yuv_car.png");if(car_image.empty()){perror("can not find this picture:\n");return -1;}Mat rgb_procss_car_image;cvtColor(car_image,rgb_procss_car_image,COLOR_RGB2YUV);imwrite("yuv_procss_car_image.jpg",yuv_procss_car_image);imwrite("rgb_procss_car_image.jpg",rgb_procss_car_image);return 0;
}

最终效果:

左边是处理后的YUV图像,右边是RGB图像

二.putText的用处和API讲解

2.1. putText的用法和作用

putText是OPENCV中常见的功能,他主要的功能是在Mat矩阵里面显示显示文字,像下图

从上图可以看出来putText是通过坐标(X,Y)在矩阵显示文字

2.2. putText的API

CV_EXPORTS_W void putText( InputOutputArray img, const String& text, Point org,int fontFace, double fontScale, Scalar color,int thickness = 1, int lineType = LINE_8,bool bottomLeftOrigin = false );

第一个参数:img需要传入的图像数据

第二个参数:text需要显示的文字

第三个参数:org文字在图像数据中的坐标位置

第四个参数:fontFace字体类型,常用的字体类型如下:

FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX,FONT_HERSHEY_TRIPLEX,FONT_HERSHEY_COMPLEX_SMALL,FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX,以上所有类型都可以配合 FONT_HERSHEY_ITALIC使用,产生斜体效果

第五个参数:fontScale字体的大小

第六个参数:color是颜色标量,字体的显示颜色

第七个参数:thickness是字体的粗细程度,默认为1

第八个参数:lineType线性,默认是LINE_8,具体的几个如下:

//! type of line
enum LineTypes {FILLED  = -1,LINE_4  = 4, //!< 4-connected lineLINE_8  = 8, //!< 8-connected lineLINE_AA = 16 //!< antialiased line
};

第九个参数:bottomLeftOrigin图像数据原点在左下角, Otherwise(默认false)图像数据中原点的左上角。默认bottomLeftOrigin = false

2.3. 用代码实现putText的功能

2.3.1.读取车辆图片
    Mat car_image = imread("car.png");if(car_image.empty()){printf("Can not load car_image.....\n");return -1;}

使用imread读取需要处理的图片

2.3.2.调用putText的API进行文字显示
    string str = "HelloWorld";Point bg;bg.x = 0;//坐标的x轴是0bg.y = 400;//坐标的y轴是400int fontFace = cv::FONT_HERSHEY_PLAIN;//PLAIN的格式double fontScale = 4.0;int thickness = 4;//thickness粗细程度是4putText(car_image,str,bg,fontFace,fontScale, Scalar(0,0,255),thickness, LINE_8);imwrite("putText.jpg", car_image);

上面是代码是利用putText对Mat矩阵进行文字显示,显示的字符是HelloWorld,这里的位置我们选择是Point(0,400)这个位置,字体选择FONT_HERSHEY_PLAIN,字体大小是4.0,颜色为红色(Scalar(0,0,255)), 绘制线的粗细程度是4,然后线的类型是LINE_8.

完整代码:
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Mat car_image = imread("car.png");if(car_image.empty()){printf("Can not load car_image.....\n");return -1;}string str = "HelloWorld";Point bg;bg.x = 0;//坐标的x轴是0bg.y = 400;//坐标的y轴是400int fontFace = cv::FONT_HERSHEY_PLAIN;//PLAIN的格式double fontScale = 4.0;int thickness = 4;//thickness粗细程度是4putText(car_image,str,bg,fontFace,fontScale, Scalar(0,0,255),thickness, LINE_8);imwrite("putText.jpg", car_image);return 0;
}

2.3.3.最后用imwrite来保存图片,最终的显示效果是

http://www.dtcms.com/a/585325.html

相关文章:

  • HTTP-发展史
  • AI 编程工具Claude Code 介绍
  • 2022年IEEE TITS SCI2区TOP,基于切线交点和目标引导策略的无人机自主路径规划,深度解析+性能实测
  • 旧电脑系统无损迁移至新电脑、硬盘系统克隆完整教程
  • 长沙网站seo诊断佛山做网站企业
  • 识别和破除信息茧房
  • 超时重传 vs 快速重传:TCP双保险如何拯救网络丢包?
  • 余弦相似度:衡量向量空间方向一致性的核心度量
  • 好网站建设公司报价文字类wordpress主题
  • 【科研绘图系列】R语言绘制密度分布图(density plot)
  • R语言绘图与可视化第六章总结
  • 建设工程消防设计备案网站网络服务提供者收集和使用
  • 如何在自己的服务器上部署 n8n
  • LangChain提示词模版 PromptTemplate
  • 做国外购物的网站怎么发货网站建设中期怎么入账
  • 【安全开发】Nuclei源码分析-模板引擎实现(五)
  • 【小技巧】PyCharm建立项目,VScode+CodeX+WindowsPowerShell开发Python pyQT6 (二)
  • 办个人网站租空间餐饮网站建设的模板
  • 国家开发投资集团有限公司广州新站优化
  • MySQL数据类型详解
  • Rust 练习册 :Rail Fence Cipher与栅栏密码
  • 织梦dedecms绿色led照明公司企业网站模板 下载网站如何免费推广
  • 【Svelte】动态加载组件并传递参数的正确姿势,及两种方式比较
  • 【ZeroRange WebRTC】Amazon Kinesis Video Streams C WebRTC SDK 详解与实践指南
  • openEuler边缘计算实践:构建高效边云协同架构
  • 自建国外购物网站公司网站开发外包公司
  • Linux内存管理揭秘:页表递归清理与TLB优化机制
  • 从“医疗大模型”向“医疗智能体”架构与路径分析(白皮书草案-下)
  • Webpack性能优化终极指南:4步实现闪电打包
  • 零基础学JAVA--Day26(枚举类)