资源简介
###对该程序做如下说明:
* 采用的是opencv3.X版本
* 针对不同的图片,需要自己手动修改阈值`g_threshVal, g_threshMax`
* 程序是根据[`这一篇博客`](https://blog.csdn.net/rrrfff/article/details/77340641#commentBox)写的,只是自己调通了以后,给大家也分享下
* 因为是自动找点,所以在设置的不太合理的情况下,会出现很奇怪的现象,后果不堪设想。
代码片段和文件信息
#include
using namespace cv;
#define CV_SHOW(x) imshow(“df“x);waitKey(0)
static void testImageRectification(cv::Mat &I);
void main()
{
Mat I;
//I = imread(“D:\\test.bmp“);
I = imread(“E:\\vs2015Project\\testDeDis\\待矫正的图片.png“);
testImageRectification(I);
}
static void testImageRectification(cv::Mat &image_original)
{
CV_SHOW(image_original); // CV_SHOW是cv::imshow的一个自定义宏,忽略即可
cv::Mat &&image = image_original.clone();
cv::Mat image_gray;
cv::cvtColor(image image_gray cv::COLOR_BGR2GRAY);
//cv::threshold(image_gray image_gray g_threshVal g_threshMax cv::THRESH_BINARY);
cv::threshold(image_gray image_gray 110 250 cv::THRESH_BINARY);
std::vector< std::vector > contours_list;
{
std::vector hierarchy;
// Since opencv 3.2 source image is not modified by this function
cv::findContours(image_gray contours_list hierarchy
cv::RetrievalModes::RETR_EXTERNAL cv::ContourApproximationModes::CHAIN_APPROX_NONE);
}
for (uint32_t index = 0; index < contours_list.size(); ++index) {
cv::RotatedRect &&rect = cv::minAreaRect(contours_list[index]);
if (rect.size.area() > 1000) {
if (rect.angle != 0.) {
// 此处可通过cv::warpAffine进行旋转矫正,本例不需要
} //if
cv::Mat &mask = image_gray;
cv::drawContours(mask contours_list static_cast(index) cv::Scalar(255) cv::FILLED);
cv::Mat extracted(image_gray.rows image_gray.cols CV_8UC1 cv::Scalar(0));
image.copyTo(extracted mask);
CV_SHOW(extracted);
std::vector poly;
cv::approxPolyDP(contours_list[index] poly 30 true); // 多边形逼近,精度(即最小边长)设为30是为了得到4个角点
cv::Point2f pts_src[] = { // 此处顺序调整是为了和后面配对,仅作为示例
poly[1]
poly[0]
poly[3]
poly[2]
};
cv::Rect &&r = rect.boundingRect(); // 注意坐标可能超出图像范围
cv::Point2f pts_dst[] = {
cv::Point(r.x r.y)
cv::Point(r.x + r.width r.y)
cv::Point(r.x + r.width r.y + r.height)
cv::Point(r.x r.y + r.height)
};
cv::Mat &&M = cv::getPerspectiveTransform(pts_dst pts_src); // 我这里交换了输入,因为后面指定了cv::WARP_INVERSE_MAP,你可以试试不交换的效果是什么
cv::Mat warp; cv::warpPerspective(image warp M image.size() cv::INTER_LINEAR + cv::WARP_INVERSE_MAP cv::BORDER_REPLICATE);
CV_SHOW(warp);
} //if
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2437 2018-07-03 15:49 main.cpp
文件 312 2018-07-03 16:16 readMe.md
文件 220677 2018-07-03 15:43 待矫正的图片.png
- 上一篇:4*4矩阵键盘(方法2) STM32F103
- 下一篇:我爱背单词8.txt
相关资源
- 《Win10 opencv4.4 dnn cuda源码编译/安装说
- Dlib FaceLandmark Detector v1.2.0
- OPENCV技术.txt
- qt_opencv_zbar20181218二维码测距和识别检
- 基于OpenCV的手势识别--手掌和拳头识别
- OpenCV 3d结构光扫描
- opencv_haartraining.exe 和opencv_createsample
- Opencv+Tensorflow入门人工智能处理无密完
- 行人检测Opencv实现
- 基于精确背景补偿的动态目标检测算
- opencv视频资料教程,51cto贾志刚录制的
-
opencv 训练 xm
l文件 haar - opencvforunity最新版
- ubuntu opencv qt 三位一体的摄像头源码
- opencv-2.4.8-part1
- OpenCV百度云链接.txt
- opencv图像处理视频
- 多边形的扫描转换
- 数字图像处理-3.7混合空间增强法-骨骼
- opencv训练分类器总结与疑问
- Patch_Sparsity代码opencv
- opencv 视频运动物体检测
- 8点算法计算基础矩阵计算机视觉Ope
- 使用Linux的V4L2读取摄像头数据+Opencv图
- opencv_createsamples.exe
- GrabCut-opencv源码注释
- 工程训练物料搬运小车OpenCV程序.rar
- opencv处理图像88分块DCT变换和量化
- opencv实现背景分离
- opencv 车牌 字符识别
评论
共有 条评论