精品简历模板网站,工装装修,用网站模板建网站,wordpress 数据图片存在哪提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、基本函数1. cvtColor(src,tmp,COLOR_BGR2RGB);2.在OpenCV和Qt中#xff0c;转换cv::Mat到QImage3.Canny(tmp,dst,30,255);4.dst matframe.clone();5.video… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言一、基本函数1. cvtColor(src,tmp,COLOR_BGR2RGB);2.在OpenCV和Qt中转换cv::Mat到QImage3.Canny(tmp,dst,30,255);4.dst matframe.clone();5.videocapture new VideoCapture(0, cv::CAP_V4L2); 二、摄像头参数1摄像头参数opencv函数cvGetCaptureProperty获得摄像头或者视频文件的指定属性。2.读入数据 总结 前言 用于记录图像处理的基础知识 一、基本函数
1. cvtColor(src,tmp,COLOR_BGR2RGB);
cvtColor(src, tmp, COLOR_BGR2RGB) 是OpenCV库中的函数用于将图像从BGR颜色空间转换为RGB颜色空间。在这个函数调用中src是输入图像通常是BGR格式的tmp是输出图像将保存转换后的RGB图像COLOR_BGR2RGB是转换的标志。
如果代码运行正确tmp将包含源图像src的RGB版本。你可以使用OpenCV的其他函数来显示或保存这个图像。这个函数通常在处理从摄像头或图像文件读取的图像时使用因为这些图像通常是以BGR格式存储的而一些其他的图像处理库或函数可能需要RGB格式的图像。
需要注意的是src和tmp必须是有效的图像对象且src必须是BGR格式的。如果src不是BGR格式或tmp不是有效的图像对象函数将无法正确工作。 cvtColor是OpenCV库中的一个函数用于将图像从一种颜色空间转换到另一种颜色空间。常见的颜色空间包括BGR、RGB、HSV、GRAY等。cvtColor函数可以在这些颜色空间之间进行转换以满足不同的图像处理需求。
函数的原型如下
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn 0)参数说明
src输入图像通常是一个多通道的彩色图像。dst输出图像将保存转换后的图像。code转换类型指定从源颜色空间到目标颜色空间的转换方式。例如COLOR_BGR2RGB表示从BGR颜色空间转换为RGB颜色空间。dstCn输出图像的通道数默认为0表示自动根据源图像的通道数和转换类型确定输出图像的通道数。
通过调用cvtColor函数可以方便地将图像从一种颜色空间转换为另一种颜色空间以满足不同的图像处理需求。
2.在OpenCV和Qt中转换cv::Mat到QImage
在OpenCV和Qt中转换cv::Mat到QImage可以通过以下方式实现
cv::Mat mat ...; // Assume mat is your source Mat
QImage qimage;// Convert Mat to QImage
qimage QImage((const unsigned char *)(mat.data), mat.cols, mat.rows, mat.step, QImage::Format_RGB888);// If mat is not continuous, you need to copy it to a new Mat and then convert it to QImage.
if(mat.isContinuous())
{qimage qimage.copy();
}注意上述代码假设你的cv::Mat是3通道的且数据类型为8位无符号整型即CV_8UC3这是最常见的图像格式。如果你的cv::Mat有不同的通道数或数据类型你需要调整代码以匹配你的具体情况。例如如果你的图像是灰度图像单通道你可能需要使用QImage::Format_Grayscale8而不是QImage::Format_RGB888。
另外这段代码也假设你的cv::Mat的数据是连续的。如果不是你需要先复制到一个新的cv::Mat中然后再转换为QImage。这是因为QImage需要连续的数据。你可以通过调用cv::Mat::isContinuous来检查数据是否连续。
3.Canny(tmp,dst,30,255);
这段代码是使用OpenCV库中的Canny函数来进行边缘检测。函数的参数包括输入图像tmp输出图像dst以及两个阈值30和255。
Canny边缘检测算法使用两个阈值来检测图像中的边缘。低阈值30用于检测弱边缘高阈值255用于检测强边缘。在这个过程中还会使用一些其他的技巧和算法来优化边缘检测的结果。
总体来说这段代码的作用是从输入图像tmp中检测出边缘并将结果保存到输出图像dst中。
4.dst matframe.clone();
这段代码是使用OpenCV库中的clone函数来复制图像。具体来说它将matframe图像复制到一个新的图像变量dst中。
clone函数创建一个与原始图像完全相同的副本包括所有的像素值、通道数、数据类型等。这意味着dst图像与matframe图像完全相同任何对dst图像的修改都不会影响到matframe图像。
总之这段代码的作用是创建一个与matframe完全相同的副本并将其保存到dst中。
5.videocapture new VideoCapture(0, cv::CAP_V4L2);
videocapture new VideoCapture(0, cv::CAP_V4L2);//ok videocapture new VideoCapture(“/dev/video0”);打开会报错 videocapture new VideoCapture(0); //ok [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module source reported: Could not read from resource.
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
无法打开摄像头videocapture new VideoCapture(0, cv::CAP_V4L2);
这段代码是使用OpenCV库中的VideoCapture类来创建一个视频捕获对象用于从摄像头或视频文件中捕获视频帧。
具体来说VideoCapture(0, cv::CAP_V4L2)创建一个视频捕获对象并使用V4L2Video4Linux2API从索引为0的摄像头设备中捕获视频。V4L2是一种在Linux操作系统中用于访问摄像头设备的接口。
VideoCapture对象创建后可以使用其成员函数如read、open等来控制视频捕获的过程例如读取视频帧、设置分辨率和帧率等。
总之这段代码的作用是创建一个VideoCapture对象用于从索引为0的摄像头设备中捕获视频并使用V4L2 API进行访问。
二、摄像头参数
1摄像头参数opencv capture.set(CAP_PROP_FRAME_WIDTH, 1080);//宽度
capture.set(CAP_PROP_FRAME_HEIGHT, 960);//高度
capture.set(CAP_PROP_FPS, 30);//帧数
capture.set(CAP_PROP_BRIGHTNESS, 1);//亮度 1
capture.set(CAP_PROP_CONTRAST,40);//对比度 40
capture.set(CAP_PROP_SATURATION, 50);//饱和度 50
capture.set(CAP_PROP_HUE, 50);//色调 50
capture.set(CAP_PROP_EXPOSURE, 50);//曝光 50
函数cvGetCaptureProperty获得摄像头或者视频文件的指定属性。
2.读入数据
代码如下示例
data pd.read_csv(https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv)
print(data.head())该处使用的url网络请求的数据。 总结
不断更新项目过程中的基础知识