В настоящее время я работаю над проектом в области медицинской техники. У меня есть большое изображение с несколькими подизображениями клетки, поэтому моя первая задача - разделить изображение.
Я подумал о следующем:
Преобразование изображения в двоичный файл
выполняется проекция пикселей яркости на ось x, чтобы я мог видеть, где есть промежутки между значениями яркости, а затем делил изображение.
Проблема возникает, когда я пытаюсь добраться до второй части. Моя идея заключается в использовании вектора в качестве проекции и суммировании всех значений яркости по всему столбцу, поэтому номер 0 вектора представляет собой сумму всех значений яркости, которые находятся в первом столбце изображения, до тех пор, пока я добраться до последнего столбца, так что в конце у меня есть проекция.
Вот как я пытался:
void calculo(cv::Mat &result,cv::Mat &binary){ //result=the sum,binary the imag.
int i,j;
for (i=0;i<=binary.rows;i++){
for(j=0;j<=binary.cols;j++){
cv::Scalar intensity= binaria.at<uchar>(j,i);
result.at<uchar>(i,i)=result.at<uchar>(i,i)+intensity.val[0];
}
cv::Scalar intensity2= result.at<uchar>(i,i);
cout<< "content" "\n"<< intensity2.val[0] << endl;
}
}
При выполнении этого кода у меня возникает ошибка нарушения. Другая проблема заключается в том, что я не могу создать матрицу с одной уникальной строкой, поэтому ... я не знаю, что я мог сделать.
Есть идеи ?! Спасибо!
В конце концов, это не работает, мне нужно сложить все пиксели в одну КОЛОННУ. Я сделал:
cv::Mat suma(cv::Mat& matrix){
int i;
cv::Mat output(1,matrix.cols,CV_64F);
for (i=0;i<=matrix.cols;i++){
output.at<double>(0,i)=norm(matrix.col(i),1);
}
return output;
}
но это дало мне ошибку:
Ошибка подтверждения (0 <= colRange.start && colRange.start <= colRange.end && colRange.end <= m.cols) в Mat, файл /home/usuario/OpenCV-2.2.0/modules/core/src/matrix .cpp, строка 276 </p>
Не знаю, любая идея была бы полезна, в любом случае большое спасибо mevatron, вы действительно оставили меня в пути.