Как я могу выполнить арифметические операции со значением пикселя в C ++, используя OpenCV?

У меня есть набор из 70 изображений RGB (argc = 71). Я хотел изменить значения пикселей в соответствии с этими формулами:

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);

А затем сохраните новые изображения. Код, который я пытался использовать с ++, приведен ниже, но я продолжаю получать эту ошибку:

SetPixels (99556,0x7fff76450000) malloc: * ошибка для объекта 0x10a9ce000: освобожденный указатель не был выделен * установить точку останова в malloc_error_break для отладки

Может ли кто-нибудь помочь мне решить этот вопрос?

Заранее спасибо!

#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;

for (int i=0; i<=image.rows;i++){
for (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;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]