OPENCV MAT内存访问错误
opencv Mat memory access error
我正在尝试编写一个函数,以补偿openCV项目中的镜头渐渐。问题在于,当我尝试访问垫子中的第一个像素时,我会收到一个内存访问错误。这可能是一个愚蠢的错误,但是如果您可以向我指出,我将不胜感激。这是功能:
void EckOpCam::FlatField(cv::Mat & parmI)
{
// workaround for access violation error
cv::Mat I = parmI;
const int channels = I.channels();
if (flatField.rows == 0)
MakeFlatFieldMat(I.rows);
// accept only char type matrices
ASSERT(I.depth() == CV_8U);
// make sure the matrices are the same size
ASSERT(I.cols == flatField.cols);
ASSERT(channels == flatField.channels());
// Try the really slow way...
int nRows = I.rows;
int nCols = I.cols;
unsigned int ipix0, ipix1, ipix2; // B,G,r values of pixel in I
float fpix0, fpix1,fpix2; // B,G,r values of pixel in flatField
float pix0, pix1, pix2;
switch (channels)
{
case 1:
for (int y = 0; y < nRows; ++y)
for (int x = 0; x < nCols; ++x)
{
{
ipix0 = I.at<cv::Vec3b>(x, y)[0];
fpix0 = flatField.at<cv::Vec3f>(x, y)[0];
pix0 = ipix0 * fpix0;
I.at<cv::Vec3b>(x, y)[0] = (pix0 > 255) ? 255 : uchar(pix0);
}
}
break;
case 3:
for (int y = 0; y < nRows; ++y)
for (int x = 0; x < nCols; ++x)
{
{
ipix0 = static_cast<uchar>(I.at<cv::Vec3b>(x, y)[0]); //<<< memory access error!
ipix1 = static_cast<uchar>(I.at<cv::Vec3b>(x, y)[1]);
ipix2 = static_cast<uchar>(I.at<cv::Vec3b>(x, y)[2]);
fpix0 = flatField.at<cv::Vec3f>(x, y)[0];
fpix1 = flatField.at<cv::Vec3f>(x, y)[1];
fpix2 = flatField.at<cv::Vec3f>(x, y)[2];
pix0 = ipix0 * fpix0;
pix1 = ipix1 * fpix1;
pix2 = ipix2 * fpix2;
I.at<cv::Vec3b>(x, y)[0] = (pix0 > 255) ? 255 : uchar(pix0);
I.at<cv::Vec3b>(x, y)[1] = (pix1 > 255) ? 255 : uchar(pix1);
I.at<cv::Vec3b>(x, y)[2] = (pix2 > 255) ? 255 : uchar(pix2);
}
}
}
}
错误是:异常抛出:读取访问违规。cv :: vec ::操作员返回0x240c37ec4a8。
给出的地址正是i.data的地址。怎么了?感谢您的帮助。
um ...没关系。事实证明,此代码的例外是真实的,不是问题。我正在使用Point Gray的示例代码。它使用垫子构造器将灰色imageptr从点转换为垫子,该垫子构造函数仅复制指针到数据。ImagePtr脱离了范围,因此当我尝试使用它时,数据是无效的。Mat.Copyto()解决了问题。如果您需要快速解决类似问题的方法,我强烈建议您阅读此内容。
相关文章:
- 尝试从C++访问 UWP 的电子邮件邮件类会导致"REGDB_E_CLASSNOTREG类未注册"错误
- C++ - 循环访问指针数组会导致错误
- 执行错误访问 遍历向量
- 错误访问 读入对象后
- 如何修复 CopyFile() 错误 5 - 访问被拒绝错误
- CreateFile 在尝试打开目录进行读取时始终返回错误 5(访问被拒绝)
- 范围检查检测到的检测代码和超出范围的错误访问
- 查找() 上的 C++ 错误访问错误
- 错误访问另一个插件中的类(错误:未定义的引用)
- C STD ::排序Intel编译器错误:访问违规
- libcurl、OSX、curl_multi_执行错误访问
- C++数组错误:访问冲突读取位置0xC0000005
- C++LinkedList错误:访问冲突错误
- 使用.open()成员函数C++的ifstream数组的错误访问代码
- C++ 段错误 访问对象指针向量的 std::vector.size()
- JNI 从 C 错误访问对象数组
- 带有内存错误访问的C++结构new
- XCode C++上的错误访问错误
- 错误访问冲突写入位置0x00229C20.尝试在控制台中输入字符串时
- MySQL 连接器/C++ 错误访问崩溃