В настоящее время я разрабатываю программу обнаружения игральных карт.Я использую Hough Line Transform для определения положения карт, так как это кажется наиболее надежным способом.потому что он меньше зависит от условий окружающей среды, таких как свет и фон (я думаю), вместо того, чтобы находить контуры.
Я использую это изображение для проверки:
И после преобразования я получаю следующий результат:
Как видите, линии не закрывают многоугольники, и я не могу сделать какой-либо вывод относительноположение карт.
Я уже думал об использовании некоторых критериев (таких как угол и т. д.) для группировки линий, принадлежащих одной и той же карте, но мне было интересно, есть ли лучший и более быстрый способ определения положения каждой карты.
Я использовал этот код:
#include <cstdlib>
#include <cstdio>
#include "detector.h"
#include "data_structs.h"
#include <unistd.h>
#define MIN_LINE_LEN 80
#define MAX_LINE_GAP 10
//Variáveis globais
Mat img;
Mat src;
int main( int argc, char** argv ){
src = imread("img.jpg");
src.copyTo(img);
preProcessImg();
detectCards();
return 0;
}
//Prepara a img para ser analisada
void preProcessImg(){
Mat aux_gray;
cvtColor(img, aux_gray, CV_BGR2GRAY); // Convert the image to grayscale
GaussianBlur(aux_gray, img, Size(5,5), 0);
}
void detectCards(){
vector<Vec4i> lines;
//Detetar as linhas
Canny(img, img, 30, 200);
HoughLinesP(img, lines, 1, CV_PI/180, 80, MIN_LINE_LEN, MAX_LINE_GAP);
}