android - 如何用opencv在白色背景上检测白纸

标签 android opencv ocr object-detection

我使用 OpenCV 库检测书中的白页。在深色表面上找到 4 个角,但白色背景只找到 3 个角。我怎样才能找到找到 4 个角或在白色背景上阅读一页的方法?

或者您能否推荐我可以在 Opencv 之外使用的另一个库?

我使用以下代码来查找轮廓。

    Mat grayImage = new Mat(imageMat.size(), CvType.CV_8UC4);
    Mat cannedImage = new Mat(imageMat.size(), CvType.CV_8UC4);
    Mat dilate = new Mat(imageMat.size(), CvType.CV_8UC4);

    Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_RGBA2GRAY);
    Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
    Imgproc.cvtColor(imageMat, grayImage, Imgproc.COLOR_BGR2GRAY);
    Imgproc.GaussianBlur(grayImage, grayImage, new Size(5.0, 5.0), 0.0);
    Imgproc.threshold(grayImage, grayImage, 20.0, 255.0, Imgproc.THRESH_TRIANGLE);
    Imgproc.Canny(grayImage, cannedImage, 75.0, 200.0);
    Imgproc.dilate(cannedImage, dilate, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(10.0, 10.0)));

如何更改此代码?

我用这些照片测试我的代码。

enter image description here

enter image description here

谢谢, 祝你有美好的一天。

最佳答案

import numpy as np
import cv2


if __name__ == '__main__':
    image = cv2.imread('image.jpg', cv2.IMREAD_UNCHANGED);

    lab = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)
    lab = cv2.split(lab)

    binary = cv2.adaptiveThreshold(lab[2], 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 7, 7)

    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
    binary = cv2.morphologyEx(binary, cv2.MORPH_DILATE, kernel,iterations=3)

    contours = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[1]

    points = np.concatenate(contours)

    (x,y,w,h) = cv2.boundingRect(points)

    cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255))

    cv2.imshow('image', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

result

result2

关于android - 如何用opencv在白色背景上检测白纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51280578/

相关文章:

android - 与 Firebase 中的 SHA-1 混淆

c++ - 如何解决 imgproc.hpp 和 core.hpp 的错误?

opencv - 循环中的 cvSetImageROI

swift - iOS实时检测相机的一些标记

ocr - 无法在正方体中使用 ChoiceIterator

java - 尝试将 String 转换为 LocalDate 时出现 "... is not public in org.bp.threeten.format.DateTimeFormatter"错误

java - 如何在内部类中调用外部类的构造函数

android - Android 上 OpenCV 中的 medianBlur 问题

php - 将图像上传到 Google Drive 以进行 OCR

javascript - 设计跨平台多内容类型文件格式的最佳方式?