How can I perform arithmetic operations with pixel value in c++ using opencv? -


i have set of 70 rgb images (argc=71). wanted change pixel values according these formulas:

l1 = (r-g)^2/((r-g)^2 + (r-b)^2 + (g-b)^2);

l2 = (r-b)^2/((r-g)^2 + (r-b)^2 + (g-b)^2);

l3 = (r-g)^2/((g-b)^2 + (r-b)^2 + (g-b)^2);

and store new images. code tried using c++ below keep getting error:

setpixels(99556,0x7fff76450000) malloc: * error object 0x10a9ce000: pointer being freed not allocated * set breakpoint in malloc_error_break debug

can me solve matter?

thanks in advance!

#include <highgui.h> #include <cv.h> #include <sstream> using namespace cv; using namespace std; int main(int agra, char** argv){ for(int k=1;k<=argc;k++){          char* imagename = argv[k];         mat image;         image = imread(imagename,cv_load_image_unchanged);          uchar l1;         uchar l2;         uchar l3;          (int i=0; i<=image.rows;i++){             (int j=0; j<=image.cols; j++){                 vec3b intensity = image.at<vec3b>(point(j, i));                 uchar red = intensity.val[0];                 int int_red = (int) red;                 uchar green = intensity.val[1];                 int int_green = (int) green;                 uchar blue = intensity.val[2];                 int int_blue = (int) blue;                  int int_l1 = pow((int_red-int_green),2)/(pow((int_red-int_green),2)+pow((int_red - int_blue),2)+pow((int_green-int_blue),2));                 int int_l2 = pow((int_red-int_blue),2)/(pow((int_red-int_green),2)+pow((int_red - int_blue),2)+pow((int_green-int_blue),2));                 int int_l3 = pow((int_green-int_blue),2)/(pow((int_red-int_green),2)+pow((int_red - int_blue),2)+pow((int_green-int_blue),2));                  l1 = (uchar) int_l1;                 l2 = (uchar) int_l2;                 l3 = (uchar) int_l3;                  intensity.val[0] = l1;                 intensity.val[1] = l2;                 intensity.val[2] = l3;                  image.at<vec3b>(j,i)= intensity;              }         }          stringstream ss;         string name = "l1l2l3image_";         string type = ".jpg";         ss<<name<<(k)<<type;         string filename = ss.str();         ss.str("");         imwrite(filename, image);     }     return 0;     } 


Comments