私がしているのは=>画像をキャプチャし、その後、キャプチャした画像のスキュー角度を計算し、計算されたスキュー角度に従ってその画像を回転させます。すべてが正常に機能していますが、問題はコードでcv :: RotatedRectを使用 していることです。このため、結果の画像にもそのボックスが含まれているため、結果の画像からそのボックスを削除したいと思います。その箱..?以下にコードを指定しています。助けてください。ありがとう..![StackOverflowを初めて使用するため、結果の画像をアップロードできませんが、画像をアップロードする権限がありません。]
// Function to 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;
}
// Function to rotate image image
void deskew(const char* filename, double angle)
{
//angle = 90;
cv::Mat img = cv::imread(filename, 0);
cv::bitwise_not(img, img);
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));
cv::Mat rot_mat = cv::getRotationMatrix2D(box.center, angle, 1);
cv::Mat rotated;
cv::warpAffine(img, rotated, rot_mat, img.size(), cv::INTER_CUBIC);
cv::bitwise_not(rotated, rotated);
imwrite(filename,rotated);
}