私はAndroidアプリケーションでOpenCVを使用しています。矩形(領収書の形のものなど)が表示されているときに、モバイルアプリケーションが自動的に写真を撮るようにしたいと思います。私はCannyエッジ検出を使用していますが、輪郭を探しているとき、配列のサイズは1500より大きくなります。明らかに、すべての輪郭をループして最大のものを見つけるのは最適ではないので、自動的にAPIを介して等高線?OpenCV Javaの等高線
私のコード今のところ:
ArrayList contours;
@Override
public Mat onCameraFrame(final CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
// Clear contours array on each frame
contours.clear();
// Get Grayscale image
final Mat gray = inputFrame.gray();
// Canny edge detection
Imgproc.Canny(gray, gray, 300, 1000, 5, true);
// New empty black matrix to store the edges captured
Mat dest = new Mat();
Core.add(dest, Scalar.all(0), dest);
// Copy the edge data over to the empty black matrix
gray.copyTo(dest);
// Is there a way to filter the size of contours so that not everything is returned? Right now this function is returning a lot of contours (1500 +)
Imgproc.findContours(gray, contours, hirearchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
return dest;
}
EDIT ユーザーが携帯電話を保有することになると私は領収書が表示されているときにアプリケーションが自動的に写真を撮りたいです。 Example receipt
Cannyよりも優れた技術をいくつか提供している場合があります。エッジを検出するためにキャニーが使用されているため、キャニーの結果を使用してオブジェクトを検出することは賢明ではありません。パラメータを調整した後でも、あらかじめレシピの色を知っているように、色のセグメンテーションを行って、入力画像の明るさのばらつきに対抗するために色の限界のしきい値を調整することをお勧めします。 – ZdaR
レシート画像は白黒になります。私は、カメラが背景から領収書を検出し、自動的にその写真を撮る方法が欲しい。 –
そして、人が偽の空白の白紙を持っている場合や、背景に白い色のオブジェクトがある場合はどうなりますか? – ZdaR