I've been reading about opencv and I've been doing some exercises, in this case I want to perform an image equalization, I have implemented the following code, but when I execute it I get the following error:
"Segmentation fault (core dumped)"
So I have no idea what is due.
The formula I am trying to use is the following:
The code is the following:
 #include <opencv2/opencv.hpp>
 #include <opencv2/highgui/highgui.hpp> 
 #include <stdio.h>
 using namespace cv;
 using namespace std;
 void equalization(cv::Mat &image,cv::Mat &green, int m) {
 Mat eqIm;
 int nl= image.rows; // number of lines
int nc= image.cols * image.channels();
for (int j=0; j<nl; j++) {
    uchar* data= image.ptr<uchar>(j);
    uchar* data2= green.ptr<uchar>(j);
    uchar* eqIm= green.ptr<uchar>(j);
    for (int i=0; i<nc; i++) {
        eqIm[i]= data[i]+m-data2[i];
    }
 }
 cv::imshow("Image",eqIm);
 imwrite("eqIm.png",eqIm);
 }
float mean(cv::Mat &image){
   cv:Scalar tempVal = mean( image );
   float myMAtMean = tempVal.val[0];
   cout << "The value is " << myMAtMean;
 }
 int main(int argc, char** argv ){
 Mat dst;
 Mat image= cv::imread("img.jpg");
 Mat green= cv::imread("green.jpg");
 cv::imshow("Image",image);
 float m= mean(image);
 equalization(image,green,m);
 cv::namedWindow("Image");
 cv::imshow("Image",image);
 imwrite("equalizated.png",dst);
 waitKey(0);
 return 0;
}
and the image "Equalization.png" that is written contains nothing
 
    