Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用opencv使用3通道制作直方图 我尝试绘制3通道图像的直方图和OPENVVAUT.EXE中的0x75 2E812F未处理的异常:微软C++异常:CV::内存位置0x00 19EF5C……它一直保持这个错误。甚至无法调试它,它一直进入汇编_C++_Opencv_Image Processing_Exception Handling - Fatal编程技术网

使用opencv使用3通道制作直方图 我尝试绘制3通道图像的直方图和OPENVVAUT.EXE中的0x75 2E812F未处理的异常:微软C++异常:CV::内存位置0x00 19EF5C……它一直保持这个错误。甚至无法调试它,它一直进入汇编

使用opencv使用3通道制作直方图 我尝试绘制3通道图像的直方图和OPENVVAUT.EXE中的0x75 2E812F未处理的异常:微软C++异常:CV::内存位置0x00 19EF5C……它一直保持这个错误。甚至无法调试它,它一直进入汇编,c++,opencv,image-processing,exception-handling,C++,Opencv,Image Processing,Exception Handling,问题在于柱状图中的线条绘制部分,其他部分工作正常 代码如下: void colorHistogram(){ Mat image=imread(“c:/aaa.jpg”); 矢量bgr_平面; 分割(图像、bgr_平面); 如果(!image.data){ cout可能是一个任性的指针或超出了分配内存的范围。不要假设您以前的代码是正确的;这样的问题有时可能会在更早的时候引起,并且只会在稍后出现 无论如何,您似乎在此处修改了代码: 主要区别在于for循环从0到histSize,而它们的从1到hist

问题在于柱状图中的线条绘制部分,其他部分工作正常

代码如下:

void colorHistogram(){

Mat image=imread(“c:/aaa.jpg”);
矢量bgr_平面;
分割(图像、bgr_平面);
如果(!image.data){

cout可能是一个任性的指针或超出了分配内存的范围。不要假设您以前的代码是正确的;这样的问题有时可能会在更早的时候引起,并且只会在稍后出现

无论如何,您似乎在此处修改了代码:


主要区别在于for循环从0到histSize,而它们的从1到histSize。由于此索引用于计算循环中的数组位置,我想这是您的问题。

ty..我刚刚复制了此代码,因为它正是我需要的。问题出在0。
Mat image = imread("c:/aaa.jpg");
vector<Mat> bgr_planes;
split(image, bgr_planes);

if(!image.data){

    cout<<"No image"<<endl;

}

int histSize = 256;
float range[] = {0, 256};
const float* histRange = {range};

Mat b_hist, g_hist, r_hist;

calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, true, false);
calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, true, false); 
calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, true, false); 

int hist_w = 512;
int hist_h = 400;

int bin_w = cvRound((double) hist_w/histSize);

Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(0,0,0));

normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());

for(int i=0; i<histSize; i++){

  line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at<float>(i-1))) , Point( bin_w*(i), hist_h - cvRound(b_hist.at<float>(i))), Scalar( 255, 0, 0), 2, 8, 0  );
  line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at<float>(i-1))), Point( bin_w*(i), hist_h - cvRound(g_hist.at<float>(i))), Scalar( 0, 255, 0), 2, 8, 0  );
  line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at<float>(i-1))) , Point( bin_w*(i), hist_h - cvRound(r_hist.at<float>(i))), Scalar( 0, 0, 255), 2, 8, 0  );

}

namedWindow("Histogram", CV_WINDOW_AUTOSIZE);
imshow("Histogram", histImage);