7.RV1126-OPENCV cvtColor 和 putText
一.cvtColor
1.作用
cvtColor 是 OPENCV 里面颜色转换的转换函数。能够实现 RGB 图像转换成灰度图、灰度图转换成 RGB 图像、RGB 转换成 HSV 等等
2.API
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
第一个参数:输入的图像数据
第二个参数:输出的图像数据
第三个参数:颜色转换的标识符,下面是转换的图表
第四个参数:目标图像通道数,默认为 0
3.代码实现:图像转换
#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()
{/********************将彩色图像转换成YUV图像*****************/Mat car_image = imread("car.png");//读取彩色图片if(car_image.empty()){printf("Can not load car_image.....\n");return -1;}Mat dst;cvtColor(car_image,dst,COLOR_BGR2YUV);//将图片从BGR格式转换成YUV格式imwrite("car1.png",dst);//将转换后的图片保存/*************将彩色图像转换成HSV图像*********************** */Mat car_image1 = imread("car.png");//读取彩色图片if(car_image1.empty()){printf("Can not load car_image1.....\n");return -1;}Mat dst1;cvtColor(car_image1,dst1,COLOR_RGB2HSV);//将图片从BGR格式转换成HSV格式imwrite("car2.png",dst1);//将转换后的图片保存return 0;
}
4.效果图:RGB->YUV,RGB->HSV
二.putText
1.作用
主要的功能是在 Mat 矩阵里面显示显示文字,也就是在图像里增加文字,类似于在图片左上角增加时间。
2.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_S,CRIPT_SIMPLEX,orFONT_HERSHEY_SCRIPT_COMPLEX,以上所有类型都可以配合 FONT_HERSHEY_ITALIC 使用,产生斜体效果
第五个参数:fontScale 字体的大小
第六个参数:color 是颜色标量,字体的显示颜色
第七个参数:thickness 是字体的粗细程度,默认为 1
第八个参数:lineType 线性,默认是 LINE_8,具体的几个如下:
第九个参数:bottomLeftOrigin 图像数据原点在左下角, Otherwise(默认 false)图像数据中原点的左上角。默认 bottomLeftOrigin= false,可能会在指定位置上往上偏一点,但不会太多。ture,就是会往下偏一点。
3.代码实现:图片上增加文字
#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 image = imread("zjl.jpg");//读取图片if(image.empty()){printf("Can not load image.....\n");return -1;}string str = "2025-05-01 ";//要添加的字符串Point bg;bg.x = 0;//坐标的x轴是0bg.y = 400;//坐标的y轴是400int fontFace = FONT_HERSHEY_SIMPLEX;//字体类型double fontScale = 5;//字体大小Scalar color = Scalar(0, 0, 255);//字体颜色int thickness = 3;//字体粗细putText(image, str, bg, fontFace, fontScale, color, thickness);//添加文字imwrite("zjl1.jpg", image);//保存图片return 0;
}