首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

程序报错,不知道错哪了

2013-12-21 
程序报错,不知道哪里错了,求助// tiqu.cpp : 定义控制台应用程序的入口点。//#include stdafx.h#include

程序报错,不知道哪里错了,求助



// tiqu.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include "cxcore.h"
#include "highgui.h"
#include "cv.h"
#include <fstream>
#define MAXL 10000000
double d[MAXL][3];
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
IplImage* img =  cvLoadImage("D://tupian2.jpg",-1);
    long t=0;
CvScalar p;
    ofstream outfile("D:\\RGB.txt");
for(int i=0;i<img->width;i++)
    {
         for(int j=0;j<img->height;j++)
        {
             p = cvGet2D(img,i,j);//(j,i)
   outfile<<p.val[0]<<" ";
   outfile<<p.val[1]<<" ";
   outfile<<p.val[2]<<" ";
   outfile<<endl;
    }
}
return 0;
}

[解决办法]
p = cvGet2D(img,i,j);//(j,i)
试改为
p = cvGet2D(img,j,i);//(j,i)

以下来自http://bbs.csdn.net/topics/390673825

 对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。cvGet2D() 的函数原型是 : CvScalar  cvGet2D (const CvArr * arr, int idx0, int idx1); 函数返回的是一个CvScalar 容器,其参数中也有两个方向的坐标,但跟我们平常习惯的坐标不一样的是,idx0代表是的行,即高度,对应于我们平常坐标系的y, idx1代表的是列,即宽度,对应于我们平常坐标系的x,cvSet2D() 也类似。所以在使用cvSet2D() 与 cvGet2D() 时,千万要注意坐标的顺序。


[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

[解决办法]
调试一下,把height和width都打印出来,然后在访问每一位的RGB的时候,也打印出当前的i和j,应该是越界

热点排行