91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-04
  • 語言: C/C++
  • 標簽: OpenCV??

資源簡介

OpenCV根據輪廓進行傾斜校正。算法參考可以參考我的文章。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?
#include???
#include?
#include?
using?namespace?std;
using?namespace?cv;
double?angleOfLines(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2);
void?rotateIamge(cv::Mat&?src?cv::Mat&?dst?double?angle);
double?angleForCorrect(const?cv::Vec4i&?line);
bool?getMinMidX(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2);
bool?getMaxMidX(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2);
bool?getMinMidY(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2);
bool?getMaxMidY(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2);
double?angle;
double?angleOfLines(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2)
{
double?moduleLine1?=?sqrt(pow(line1[0]?-?line1[2]?2)?+?pow(line1[1]?-?line1[3]?2));
double?moduleLine2?=?sqrt(pow(line2[0]?-?line2[2]?2)?+?pow(line2[1]?-?line2[3]?2));
double?dotProduct?=?(line1[2]?-?line1[0])*(line2[2]?-?line2[0])?+?(line1[3]?-?line1[1])*(line2[3]?-?line2[1]);

return?acos(dotProduct?/?moduleLine1?/?moduleLine2)?*?180?/?CV_PI;
}
double?angleForCorrect(const?cv::Vec4i&?line)
{
Vec4i?unitXVector(0?0?1?0);
angle?=?angleOfLines(unitXVector?line);??//?here?angle?belongs?to?[0?pi/2]
??//?@attention:?the?increment?direction?of?X?and?Y?axis?of?OpenCV?is?different?from?usual?rectangular?coordinate?system.?The?origin?point?is?in?the?upper?left?corner?of?the?image
if?(angle? {
//?consider?in?the?horizontal?direction
if?(line[1]?>?line[3])
{
angle?=?-angle;
}
}
else
{
//?consider?in?the?vertical?direction
if?(line[1]?>?line[3])
{
angle?=?90?-?angle;
}
else
{
angle?=?angle?-?90;
}
}
cout?< return?angle;
}
bool?getMinMidX(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2)
{
return?(line1[0]?+?line1[2])?}
bool?getMaxMidX(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2)
{
return?(line1[0]?+?line1[2])?>?(line2[0]?+?line2[2]);
}

/**
*?@brief?comparison?function?for?sort?sort?vector?from?small?to?large?accodoring?to?y?of?the?midpoint?of?each?element
*?@param?line1
*?@param?line2
*?@return
*/
bool?getMinMidY(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2)
{
return?(line1[1]?+?line1[3])?}

/**
*?@brief?comparison?function?for?sort?sort?vector?from?large?to?small?accodoring?to?y?of?the?midpoint?of?each?element
*?@param?line1
*?@param?line2
*?@return
*/
bool?getMaxMidY(const?cv::Vec4i&?line1?const?cv::Vec4i&?line2)
{
return?(line1[1]?+?line1[3])?>?(line2[1]?+?line2[3]);
}

void?rotateIamge(cv::Mat&?src?cv::Mat&?dst?double?angle)
{
cv::Point2f?center(src.cols?/?2?src.rows?/?2);
cv::Mat?rot?=?getRotationMatrix2D(center?angle?1);
cv::Rect?box?=?RotatedRect(center?src.size()?angle).boundingRect(

評論

共有 條評論