矢量下标超出范围 opencv c++
Vector Subscript Out Of Range opencv c++
我正在尝试编写一些代码,该代码首先将视频逐帧转换为其r,g色度,然后将其转换为直方图进行比较。 但是,我遇到了一些麻烦,不允许对向量或矩阵进行某些操作(反之亦然)。
Mat src, res, out, hsv_vid;
vector<Mat> spl;
Mat spl_r, spl_g, spl_b;
Mat r_chroma, g_chroma, frame_chroma;
for(;;){
cap1 >> src; //read video frame into src matrix
if (src.empty()) break;
//extract channels
split(src, spl);
spl_r = spl[2];
spl_g = spl[1];
spl_b = spl[0];
//convert whole frame to chromaticity
r_chroma = spl_r / (spl_r + spl_g + spl_b);
g_chroma = spl_g / (spl_r + spl_g + spl_b);
//convert matrix to vector
vector<vector<Mat>> r_chroma_vec;
for (int i = 0; i < r_chroma.rows; i++) {
vector<Mat> row;
r_chroma.row(i).copyTo(row);
r_chroma_vec.push_back(row);
}
vector<vector<Mat>> g_chroma_vec;
for (int i = 0; i < g_chroma.rows; i++) {
vector<Mat> row;
g_chroma.row(i).copyTo(row);
g_chroma_vec.push_back(row);
}
merge(r_chroma_vec, frame_chroma);
merge(g_chroma_vec, frame_chroma);
} //end for(;;)
//disp chromaticity test img
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION); //use .PNG compression
compression_params.push_back(9);
try { imwrite("ChromaTest.png", frame_chroma, compression_params); } //write output matrix to file
catch (runtime_error& ex) { return -2; }
如果我希望能够进行除法和加法以获得我的色度,那么r_chroma和g_chroma必须是矩阵,那么我就不能合并它们。 如果我有 r_chroma 和 g_chroma 作为向量,那么我可以合并它们,但我不能对它们进行数学运算。
有没有办法合并() 2 个矩阵,还是我用错误的方式这样做? 如果有人能指出我正确的方向,我将不胜感激。
感谢您的阅读!
[编辑]:添加了矩阵->矢量转换,使合并到输出矩阵成为可能。
cv::merge 是 cv::split 的对应物,1st arg 是 vector<Mat>
或 Mat[],2nd arg 是结果 Mat。
所以,你只是弄错了参数。
您的方法中的另一个问题是这部分:
r_chroma = spl_r / (spl_r + spl_g + spl_b);
是的,您可以使用数学运算符,但是(spl_r + spl_g + spl_b)
会饱和,结果 Mat 仍然是一个 uchar 运算符。
[编辑]:第一次尝试修复矢量问题:
vector<Mat> spl_new;
spl_new.push_back( spl_b ); // <-- ???
spl_new.push_back( g_chroma );
spl_new.push_back( r_chroma );
Mat result;
merge( spl_new, result );
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用范围(OpenCV)脱粒RGB图像
- 如何在OpenCV 3.4.7中计算CV_32FC1 cv::GpuMat图像的(范围)直方图
- 移植:OpenCV 2.4.3 -> OpenCV 3.1.,cvGetMat 未在此范围内声明
- OpenCV-浮动数据类型和强度范围在0-255范围内的RGB通道
- 结构从运动(openCV):“重建”未在此范围内声明
- 将自适应阈值应用于范围函数 opencv c++
- OPENCV图像处理,向量下标超出范围
- 检测 OpenCV 中"average"的颜色范围
- 矢量下标超出范围 Opencv
- OpenCV 符号未在此范围内声明
- 未在此范围中声明Opencv变量
- OpenCV:“SiftDescriptorExtractor”未在此范围内声明
- Matlab to OpenCV:在一定范围内具有值的像素的掩码
- OpenCV C++:从存储在 int 向量的索引中为垫子类型数据创建列范围
- 矢量下标超出范围 opencv c++
- 如何缩放opencv中[0,1]范围内的像素值
- Opencv DMatch距离超出范围
- 如何阈值之间的多个范围在opencv