Android 使用OpenCV在Canny Edge中进行处理后,如何仅提取水平线或垂直线?

Android 使用OpenCV在Canny Edge中进行处理后,如何仅提取水平线或垂直线?,android,opencv,image-processing,Android,Opencv,Image Processing,到目前为止,我已经做到了这一点。它只是进行精明的边缘过滤 override fun onCameraFrame(inputFrame: CvCameraViewFrame): Mat? { mRgba = inputFrame.rgba() Imgproc.cvtColor(mRgba, mRgbaFiltered, Imgproc.COLOR_BGR2GRAY) val mMat = Mat() Imgproc.Canny(mRgbaFiltered, mM

到目前为止,我已经做到了这一点。它只是进行精明的边缘过滤

override fun onCameraFrame(inputFrame: CvCameraViewFrame): Mat? {
    mRgba = inputFrame.rgba()

    Imgproc.cvtColor(mRgba, mRgbaFiltered, Imgproc.COLOR_BGR2GRAY)
    val mMat = Mat()

    Imgproc.Canny(mRgbaFiltered, mMat, threshold.toDouble(), threshold * 3.toDouble())

    return mMat
}
除此之外,我只想提取垂直线或水平线

忘掉垂直线吧。但至少,我想提取水平线。
它甚至可以检测到15度的水平线。然后,如果它不够水平,我想显示每一行的垂直线。然后,我想数一数水平线的数量。如何完成此实现?

制作两份图像副本,并尝试使用所选角度作为检测极限的Hough线变换。在一幅图像中检测垂直线,在另一幅图像中检测水平线。然后数一数每幅图像的轮廓。你能澄清一下这句话吗?这对我来说没有任何意义:“然后,如果它不够水平,那么,我想显示每行的垂直线。”因为屏幕是横向的,当我使用应用程序时,横向在横向方面变得垂直。例如,当您为一堆卡片拍照时,高度会更长。但屏幕是一种横向模式。我想通过数线来计算牌的数量。然而,卡片的边缘并不总是水平或垂直的。我想计算行数,即使是15行。使用
getStructuringElement
创建水平和垂直内核,然后使用
morphlogyEx
MORPH\u OPEN
分别创建水平和垂直掩码