我正在开发openCV C ++项目,
我的项目的一部分需要用鼠标指向图像的任何像素,得到它的x和y坐标然后我应该在该像素周围复制一个8 * 8像素块,以便为该块应用一些图像处理功能。
这是我的代码的一部分,在像素周围采用8 * 8块:
cv::Mat foo = Mat(8, 8, CV_8UC3);
foo = img3.colRange(x-4, x + 4).rowRange(y-4, y + 4);
但现在我的图像边框有问题;如果鼠标位于图像边界或角落之一附近的像素上,则我有一个例外,因为col&行(块大小变得比现有图像大)。
我该如何解决这个问题?
答案 0 :(得分:0)
只需钳制x和y值,使其周围总共有4个像素:
x = max(4, min(img3.cols - 5, x))
y = max(4, min(img3.rows - 5, x))
cv::Mat foo = img3.colRange(x-4, x + 4).rowRange(y-4, y + 4);