目前,我正在从事一个医学工程项目。我有一个带有几个子图像的大图像,所以我的第一个任务是分割图像。
我想到了接下来的事情:
将图像转换为二进制
将亮度像素投影到 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;
}
但它给了我一个错误:Mat,文件/home/usuario/OpenCV-2.2.0/中的断言失败(0 <= colRange.start && colRange.start <= colRange.end && colRange.end <= m.cols)模块/核心/src/matrix.cpp,第 276 行
我不知道,任何想法都会有所帮助,无论如何非常感谢mevatron,你真的让我挡了路。