资源简介
该程序可以实现读取图片,然后将图片校正
代码片段和文件信息
#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 < corners.size(); i++)
{
for (size_t j = i + 1; j {
if (corners[i].y < corners[j].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 < m2.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 < corners.size(); i++)
{
if (corners[i].y < center.y && top.size() < 2) //这里的小于2是为了避免三个顶点都在top的情况
top.push_back(corners[i]);
else
bot.push_back(corners[i]);
}
corners.clear();
if (top.size() == 2 && bot.size() == 2)
{
cout << “log“ << endl;
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语言 学生成绩管理系统
相关资源
- 图像预处理五种滤波
- 基于opencv漫水填充算法综合
- 基于改进的fcm算法的图像分割vc++
- 利用C++类实现PNG图像读写及显示
- Visual+C++数字图像处理-谢凤英-源代码
- 基于图割的图像分割OpenCV+MFC实现
- Bmp图像处理.zip
- VC++数字图像处理典型算法及实现
- 拼音分割算法
- 基于MFC的图像的拼接系统
- Visual C++数字图像实用工程案例精选源
- MFC VC++实现Sierpinski分形图像
- VC6.0 完整的图像处理程序 运用了大量
- VC图像处理-用Canny算子提取边缘
- 基于图像的二代身份证识别
- 数字图像处理扑克牌识别程序
- 数字图像处理与机器视觉——Visual
- 基于leapmotion的HMM手势识别
- 现代优化设计黄金分割法和二次插值
- C++ 图像处理283241
- C++图像伪彩色处理源代码
- C++数字水印完整系统参考
- 图像处理方面学习的好MFC显示直方图
- Visual C++.NET图像处理编程源代码 陆宗
- 使用c++读取图像到二维矩阵
- 中值滤波_均值滤波c语言实现_工程文
- 直方图均衡化_c语言实现_源代码+实验
- (VC++ 数字图像处理典型算法及实现源
- 基于MFC的bmp图像处理268237
- c++指纹识别系统
评论
共有 条评论