資源簡介
該程序可以實現讀取圖片,然后將圖片校正
代碼片段和文件信息
#include?
#include?
#include?
#include?
using?namespace?std;
using?namespace?cv;
cv::Point2f?center(0?0);
bool?sort_corners(std::vector&?corners)
{
????std::vector?top?bot;
????cv::Point2f?tmp_pt;
????std::vector?olddata?=?corners;
????if?(corners.size()?!=?4)
????{
????????return?false;
????}
????for?(size_t?i?=?0;?i?????{
????????for?(size_t?j?=?i?+?1;?j ????????{
????????????if?(corners[i].y?????????????{
????????????????tmp_pt?=?corners[i];
????????????????corners[i]?=?corners[j];
????????????????corners[j]?=?tmp_pt;
????????????}
????????}
????}
????top.push_back(corners[0]);
????top.push_back(corners[1]);
????bot.push_back(corners[2]);
????bot.push_back(corners[3]);
????if?(top.size()?==?2?&&?bot.size()?==?2)?{
????????corners.clear();
????????cv::Point2f?tl?=?top[0].x?>?top[1].x???top[1]?:?top[0];
????????cv::Point2f?tr?=?top[0].x?>?top[1].x???top[0]?:?top[1];
????????cv::Point2f?bl?=?bot[0].x?>?bot[1].x???bot[1]?:?bot[0];
????????cv::Point2f?br?=?bot[0].x?>?bot[1].x???bot[0]?:?bot[1];
????????corners.push_back(tl);
????????corners.push_back(tr);
????????corners.push_back(br);
????????corners.push_back(bl);
????????return?true;
????}
????else
????{
????????corners?=?olddata;
????????return?false;
????}
}
cv::Point2f?computeIntersect(cv::Vec4i?a?cv::Vec4i?b)
{
????int?x1?=?a[0]?y1?=?a[1]?x2?=?a[2]?y2?=?a[3];
????int?x3?=?b[0]?y3?=?b[1]?x4?=?b[2]?y4?=?b[3];
????if?(float?d?=?((float)(x1?-?x2)?*?(y3?-?y4))?-?((y1?-?y2)?*?(x3?-?x4)))
????{
????????cv::Point2f?pt;
????????pt.x?=?((x1*y2?-?y1*x2)?*?(x3?-?x4)?-?(x1?-?x2)?*?(x3*y4?-?y3*x4))?/?d;
????????pt.y?=?((x1*y2?-?y1*x2)?*?(y3?-?y4)?-?(y1?-?y2)?*?(x3*y4?-?y3*x4))?/?d;
????????return?pt;
????}
????else
????????return?cv::Point2f(-1?-1);
}
bool?IsBadLine(int?a?int?b)
{
????if?(a?*?a?+?b?*?b?100)
????{
????????return?true;
????}
????else
????{
????????return?false;
????}
}
bool?x_sort(const?Point2f?&?m1?const?Point2f?&?m2)
{
????return?m1.x?}
//確定四個點的中心線
void?sortCorners(std::vector&?corners
????cv::Point2f?center)
{
????std::vector?top?bot;
????vector?backup?=?corners;
????sort(corners?x_sort);??//注意先按x的大小給4個點排序
????for?(int?i?=?0;?i?????{
????????if?(corners[i].y?????????????top.push_back(corners[i]);
????????else
????????????bot.push_back(corners[i]);
????}
????corners.clear();
????if?(top.size()?==?2?&&?bot.size()?==?2)?
????{
????????cout?<“log“?<????????cv::Point2f?tl?=?top[0].x?>?top[1].x???top[1]?:?top[0];
????????cv::Point2f?tr?=?top[0].x?>?top[1].x???top[0]?:?top[1];
????????cv::Point2f?bl?=?bot[0].x?>?bot[1].x???bot[1]?:?bot[0];
????????cv::Point2f?br?=?bot[0].x?>?bot[1].x???bot[0]?:?bot[1];
????????corners.push_back(tl);
????????corners.push_back(tr);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-08-09?03:18??my_scanner-master\
?????文件?????????378??2017-08-09?03:18??my_scanner-master\.gitattributes
?????文件?????????574??2017-08-09?03:18??my_scanner-master\.gitignore
?????文件???????10743??2017-08-09?03:18??my_scanner-master\main.cpp
?????目錄???????????0??2017-08-09?03:18??my_scanner-master\test_img\
?????文件??????176722??2017-08-09?03:18??my_scanner-master\test_img\1.png
?????文件??????196358??2017-08-09?03:18??my_scanner-master\test_img\12.png
?????文件??????218907??2017-08-09?03:18??my_scanner-master\test_img\20.png
?????文件??????759969??2017-08-09?03:18??my_scanner-master\test_img\30.png
?????文件???????35525??2017-08-09?03:18??my_scanner-master\test_img\5.jpg
?????文件??????133263??2017-08-09?03:18??my_scanner-master\test_img\7.png
?????文件??????183098??2017-08-09?03:18??my_scanner-master\test_img\9.png
?????文件??????211927??2017-08-09?03:18??my_scanner-master\test_img\p1.png
?????文件??????197410??2017-08-09?03:18??my_scanner-master\test_img\p3.png
?????文件??????220067??2017-08-09?03:18??my_scanner-master\test_img\p4.png
- 上一篇:北郵-編譯原理-詞法分析
- 下一篇:Linux c語言 學生成績管理系統
評論
共有 條評論