问题描述
- opencv 操作像素报错 cv::Exception
-
我在网上看到了很多种方法去操作图中的像素,但是无论用哪个都出现这样的错误:
0x7611b727 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0039fa94 处的 cv::Exception。
编译是正确的。
我的代码:
#include
#include
#include
#include
#includeint main(int argc, char** argv)
{
//int i = 0;
cv::Mat foreground;
//for(int i = 0; i < 320; i++){
// for(int j = 0; j < 240; j++){
// foreground.atcv::Vec3b(i,j)[0] = 0;
// foreground.atcv::Vec3b(i,j)[1] = 0;
// foreground.atcv::Vec3b(i,j)[2] = 0;// foreground.at<uchar>(i,j) = 0; // } //} for (int j=0; j<foreground.rows; j++) { uchar* data= foreground.ptr<uchar>(j); for (int i=0; i<foreground.cols; i++) { data[i] = 255; } } //for(int i=0;i<foreground.rows;i++) // for(int j=0;j<foreground.cols;j++) // foreground.at<uchar>(i,j)=255; cv::imshow("video", foreground); return 0;
}
里面种种被注释的也就是网上提到的一些方法。问题到底出在哪里了?没初始化么?可是我现在没注释掉的,就是逐像素赋值啊?我做的是运动目标跟踪,本来是在提取出运动区域以后(一张二值化的图)想根据运动区域的轮廓取出目标来,然后可以算直方图、角点什么的。在整体的代码里面,foreground是已经计算除的前景,所以也是有图像的,一样报错。
另外有哪位大神愿意被骚扰以后碰到问题直接问?求助啊
解决方案
uchar* data= foreground.ptr(j);
在这里下一个断点,调试下,看看指针有没有越界以及其它问题。
解决方案二:
表示不太能看懂越界这样的问题:我截了个运行的图:
显示出现了一些错误的指针,但是我不知道代表在哪里出了问题应该怎么去处理。。
解决方案三:
应该是图像加载出了问题,碰到过这样的错误,仔细检查下图像的路径
解决方案四:
debug调试出错的时候,查看各个变量指针,是否正确。
图中各个变量都正确吗
时间: 2024-12-21 06:01:50