Opencv JavaCV:如何在二值图像中找到重要点

Opencv JavaCV:如何在二值图像中找到重要点,opencv,expression,binary-data,javacv,Opencv,Expression,Binary Data,Javacv,我在使用JavaCV实现我的这个项目时遇到了一个问题。我想在二值图像中至少找到最上面、最下面、最左边和最右边的点: 这里的点是(x,y)坐标。我尝试过实现HoughLines(它只检测直线而不检测曲线)和cvFindContours,但我就是无法正确提取坐标。我还是一个新手,如果我知道白线和背景的值,那么也许我可以在图像周围循环 有更容易的办法吗?非常感谢您的帮助。如果您有像std::vector pts这样的点向量,那么您可以使用opencvcv::boundingRect方法来计算点集的右

我在使用JavaCV实现我的这个项目时遇到了一个问题。我想在二值图像中至少找到最上面、最下面、最左边和最右边的点:

这里的点是(x,y)坐标。我尝试过实现HoughLines(它只检测直线而不检测曲线)和cvFindContours,但我就是无法正确提取坐标。我还是一个新手,如果我知道白线和背景的值,那么也许我可以在图像周围循环


有更容易的办法吗?非常感谢您的帮助。

如果您有像
std::vector pts
这样的点向量,那么您可以使用opencv
cv::boundingRect
方法来计算点集的右上边界矩形。 像这样使用它:

// this is your set of floating point (filled vector)
std::vector<cv::Point2f> pts;
// convert to matrix
cv::Mat ptsmat(pts);
// compute the bounding rectangle 
cv::Rect bbox = cv::boundingRect(ptsmat);
//这是一组浮点(填充向量)
std::向量pts;
//转换为矩阵
cv::Mat ptsmat(pts);
//计算边界矩形
cv::Rect bbox=cv::boundingRect(ptsmat);

我使用C++ opencv API,但是可以在JavaCV

< P>中使用相应的函数,你可以使用一个循环来找到最左边、右边、顶部和底部的点。但是,您需要考虑如何进行智能循环。您可以在所有像素之间循环,但也可以使用更智能的方法。例如,最左边的点可能在左边的某个地方。所以,如果你使用一条从左到右的扫描线,你可能会发现这个像素,而不是只扫描顶部->底部。也就是说,从图像中获取值非常容易


假设我们有一个带有n个通道的图像
binarymg
。在灰度图像的情况下,n应为1,但在彩色图像的情况下,n应为3。假设我们有指数
0,你在这里假设KnighK已经找到了他的白点集,这是他要问的问题之一。而且,这也不是最有效的,因为你是说他应该找到所有的白点,而他只对最左边、最右边、最上面和最下面的点感兴趣。我将添加一个建议:他应该使用OpenCV C++ API,用CV::Mat对象表示一个图像,并访问(更容易)到像素值(Matat。(x,y))Hayy,你找到了解决这个问题的方法吗?如果是,请分享你的答案。
((uchar *)(binaryImg->imageData + y*binaryImg->widthStep))[x*binaryImg->nChannels + k]
((uchar *)(binaryImg->imageData + y*binaryImg->widthStep))[x] == 255