Besoin d'aide, Plz voir la question suivante, je pose cette question la deuxième fois, parce que la dernière fois je n'ai pas eu de réponse. Tenez compte après deux liens => 1:=> Finding Skew Angle 2:=> Rotating Image as per skew angleTrouver angle d'inclinaison et faire pivoter l'image en C++ OpenCV
je veut faire la même chose, et le code donné sur ce lien fonctionne bien. Mais le problème est, voir le texte affiché dans ces images, ce code fonctionne bien pour le texte bien aligné seulement (tel qu'affiché dans les images sur les liens donnés), mais il obtient échoué lorsque votre texte est sous forme dispersée. S'il vous plaît dites-moi comment le faire pour les images qui contiennent du texte sous la forme dispersée ..? Merci d'avance..!! [Ici, le principal défi est de TROUVER l'ANGLE CORRECT SKEW ..] Je suis très frustré à cause de ce problème ... Plz Help .. !!!
Mon code est la suivante: =>
// Find Skew angle.
double compute_skew(const char* filename)
{
// Load in grayscale.
cv::Mat img = cv::imread(filename, 0);
// Binarize
cv::threshold(img, img, 225, 255, cv::THRESH_BINARY);
// Invert colors
cv::bitwise_not(img, img);
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 3));
cv::erode(img, img, element);
std::vector<cv::Point> points;
cv::Mat_<uchar>::iterator it = img.begin<uchar>();
cv::Mat_<uchar>::iterator end = img.end<uchar>();
for (; it != end; ++it)
if (*it)
points.push_back(it.pos());
cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));
double angle = box.angle;
if (angle < -45.)
angle += 90.;
cv::Point2f vertices[4];
box.points(vertices);
for(int i = 0; i < 4; ++i)
cv::line(img, vertices[i], vertices[(i + 1) % 4], cv::Scalar(255, 0, 0), 1, CV_AA);
std::cout << "File **************Angle***************** " << filename << ": " << angle << std::endl;
return angle;
}
// Rotate Image according to skew angle.
void deskew(const char* filename, double angle)
{
cv::Mat img = cv::imread(filename, 0);
Point2f src_center(img.cols/2.0F, img.rows/2.0F);
Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
Mat rotated;
warpAffine(img, rotated, rot_mat, img.size(), cv::INTER_CUBIC);
imwrite(filename,rotated);
}
Ici, ça recommence. Qu'avez-vous essayé? –
Dois-je mettre mon code ici ..? Si vous voulez voir ... –
Oui, s'il vous plaît, les gens ont tendance à résoudre les problèmes plus rapidement de cette façon. –