在opencv中裁剪旋转图像时使用的框

时间:2014-03-25 20:38:08

标签: c++ image opencv

我已经旋转了图像,现在我想裁剪它以便切割边框并且可以查看完整的裁剪图像。我尝试了一种我在网上找到的方法,但它没有用,说实话我并不完全明白它想要做什么。我理解旋转部分。他有点要点?它是图像的四个角落吗?因为他推动这些观点的方法对我不起作用。我使用了图像的四个角而不是旋转,但是当我尝试运行getRectSubPix时,可能是因为我的盒子错了但是我不确定getRectSubPix需要什么呢?

这是运行此代码后得到的输出。显然,输出是有效的(为什么他这样做很重要?)而且作物也不起作用。

after running code this is what I get

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::Size box_size = box.size;
if (box.angle < -45.)
  std::swap(box_size.width, box_size.height);
cv::Mat cropped;
cv::getRectSubPix(rotated, box_size, box.center, cropped);

0 个答案:

没有答案