gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:02 36 4
gpt4 key购买 nike

我使用 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com