我是OpenCV的新手,在写入Mat-Object的子范围时遇到一些麻烦。
下面的代码迭代给定的图像。对于每个像素,它采用5x5范围内的像素,找到最亮的像素,并将所有其他像素设置为0.
我多次调用该函数。在随机数量的调用之后,该函数给出了分段错误或“malloc内存损坏”。有时我可以调用函数10次,没有问题,有时只调用两次,然后程序停止。
我将问题追踪到该行,我使用子图像写入原始图像。
subimage.at<uchar>(rowSubimage,colSubimage) = 0;
这个功能让我发疯:
void findMaxAndBlackout(Mat& image, int size){
Point centralPoint;
Size rangeSize = Size(size,size);
Mat subimage;
Rect range;
// iterate the image
for(int row = 0; row <= image.rows-size; row++){
for(int col = 0; col <= image.cols-size; col++){
centralPoint = Point(col,row);
range = Rect(centralPoint, rangeSize);
// slice submatrix and find max
subimage = image(range);
double max;
minMaxLoc( subimage, NULL, &max, NULL, NULL );
// iterate the surrounding
for(int rowSubimage = 0; rowSubimage <= subimage.rows; rowSubimage++){
for(int colSubimage = 0; colSubimage <= subimage.cols; colSubimage++){
if(subimage.at<uchar>(rowSubimage,colSubimage) < max){
//this line cause the trouble
subimage.at<uchar>(rowSubimage,colSubimage) = 0;
}
}
}
}
}}
Mat-Object使用:
生成Mat houghImage = imread("small_schachbrett1_cam.png", CV_LOAD_IMAGE_GRAYSCALE);
请帮我理解这个问题。
如果您知道更好或更有效的方法来获得相同的结果,请告诉我。我愿意接受任何改进
此致 benniz
答案 0 :(得分:0)
你超出范围:
row <= image.rows-size
col <= image.cols-size
rowSubimage <= subimage.rows
colSubimage <= subimage.cols
应该是
row < image.rows-size
col < image.cols-size
rowSubimage < subimage.rows
colSubimage < subimage.cols