opencv实战,钢板焊接点寻找2
第二张图
处理代码:
//第二张图,调滤波迭代值,加houghlinesP(轮廓)#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;Mat g_srcImage, g_dstImage; //原始图和效果图
int g_nElementShape = MORPH_RECT; //元素结构的形状int g_nMaxIterationNum = 10; //变量接收的TrackBar位置参数
int g_nOpenCloseNum = 0;static void on_OpenClose(int, void*); //回调函数
static void ShowHelpText();int main()
{system("color 2F");ShowHelpText();g_srcImage = imread("2.jpg");if (!g_srcImage.data) { printf("Oh,no,读取srcImage错误~! \n"); return false; }namedWindow("【开运算/闭运算】", 1);g_nOpenCloseNum = 11;//9createTrackbar("迭代值", "【开运算/闭运算】", &g_nOpenCloseNum, g_nMaxIterationNum * 2 + 1, on_OpenClose);while (1){int c;on_OpenClose(g_nOpenCloseNum, 0);c = waitKey(0); //获取按键if ((char)c == 'q' || (char)c == 27) //按下键盘按键Q或者ESC,程序退出 break;if ((char)c == 49) //键盘按键1的ASII码为49,按下键盘按键1,使用椭圆(Elliptic)结构元素结构元素MORPH_ELLIPSEg_nElementShape = MORPH_ELLIPSE;else if ((char)c == 50) //键盘按键2的ASII码为50,按下键盘按键2,使用矩形(Rectangle)结构元素MORPH_RECTg_nElementShape = MORPH_RECT;else if ((char)c == 51) //键盘按键3的ASII码为51,按下键盘按键3,使用十字形(Cross-shaped)结构元素MORPH_CROSSg_nElementShape = MORPH_CROSS;else if ((char)c == ' ') //按下键盘按键space,在矩形、椭圆、十字形结构元素中循环g_nElementShape = (g_nElementShape + 1) % 3; }return 0;
}//【开运算/闭运算】窗口的回调函数
static void on_OpenClose(int, void*)
{int offset = g_nOpenCloseNum - g_nMaxIterationNum; //偏移量int Absolute_offset = offset > 0 ? offset : -offset; //偏移量绝对值//自定义核Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset + 1, Absolute_offset + 1), Point(Absolute_offset, Absolute_offset));if (offset < 0)morphologyEx(g_srcImage, g_dstImage, MORPH_OPEN, element);elsemorphologyEx(g_srcImage, g_dstImage, MORPH_CLOSE, element);imshow("【开运算/闭运算】", g_dstImage);//加houghlinesP、Mat srcImage = g_dstImage; Mat midImage, dstImage; //临时变量和目标图的定义Canny(srcImage, midImage, 50, 200, 3); cvtColor(midImage, dstImage, COLOR_GRAY2BGR); //转化为灰度图//进行霍夫线变换vector<Vec4i> lines; //定义一个矢量结构lines用于存放得到的线段矢量集合HoughLinesP(midImage, lines, 1, CV_PI / 180, 23, 10, 5); //(输入图像,储存线条矢量,距离精度,角度精度,阈值参数(大于阈值才可以被检测返回),最低线段长度(比这个参数短的不能显示),允许同一行点与点连接的最大距离)//依次在图中绘制出每条线段for (size_t i = 0; i < lines.size(); i++){Vec4i l = lines[i];//斜率过滤float k = 1.0*(l[3] - l[1]) / (l[2] - l[0]);int slop = abs(k);Point a;if (slop <1) //底线{}else if (slop >= 1){line(dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 2, LINE_AA);Point a((l[0] + l[2]) / 2, (l[1] + l[3]) / 2);circle(dstImage, a, 3, Scalar(0, 255, 0), 2);cout << "坐标为(" << (l[0] + l[2]) / 2 << "," << (l[0] + l[2]) / 2 << ")" << endl;}}imshow("【效果图】", dstImage);}static void ShowHelpText()
{printf("\n\n\t\t\t 当前使用的OpenCV版本为:" CV_VERSION);printf("\n\t按键操作说明: \n\n""\t\t键盘按键【ESC】或者【Q】- 退出程序\n""\t\t键盘按键【1】- 使用椭圆(Elliptic)结构元素\n""\t\t键盘按键【2】- 使用矩形(Rectangle )结构元素\n""\t\t键盘按键【3】- 使用十字型(Cross-shaped)结构元素\n""\t\t键盘按键【空格SPACE】- 在矩形、椭圆、十字形结构元素中循环\n");
}
结果图
位置图:
opencv实战,钢板焊接点寻找2相关推荐
- opencv实战,钢板焊接点寻找1
最近做了一个钢板焊接点寻找项目,记录一下,哈哈 分为3张图,分成3个博客讲.分别寻找焊接点,因为没有视频,只能从图片中提取. 还有一个问题要求助在第四个博客,我想出一个方法,看看大家有没有什么更好的办 ...
- 基于OpenCV实战:车牌检测
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 拥有思维导图或流程将引导我们朝着探索和寻找实现目标的正确道路的方向 ...
- [OpenCV实战]49 对极几何与立体视觉初探
本文主要介绍对极几何(Epipolar Geometry)与立体视觉(Stereo Vision)的相关知识.对极几何简单点来说,其目的就是描述是两幅视图之间的内部对应关系,用来对立体视觉进行建模,实 ...
- 再次升级,985博士整理的71个OpenCV实战项目教程开放下载!
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的 ...
- 基于OpenCV实战:3步实现图像降噪
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在本文中,我们将展示如何通过三个简单的步骤来实现降噪.我们将使用机 ...
- 基于OpenCV实战:绘制图像轮廓(附代码)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高 ...
- 基于OpenCV实战的图像处理:色度分割
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 通过HSV色阶使用彩色图像可以分割来分割图像中的对象,但这并不是分 ...
- 基于OpenCV实战:提取中心线
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|AI算法与图像处理 问题 前几天有个人问了我一个问题,问 ...
- 基于OpenCV实战:对象跟踪
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 介绍 跟踪对象的基本思想是找到对象的轮廓,基于HSV颜色值. 轮廓 ...
最新文章
- 数据集神经网络共同进步
- double 导出txt保留两位_使用Jade“精修”XRD图谱并导出数据
- Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
- mongodb 备份压缩_MongoDB 如何实现备份压缩
- 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
- leetcode 148. Sort List | 148. 排序链表(最优解归并排序,O(1)空间)
- 发那科karel机器人环境配置_Fanuc-你没用到的Karel编译方式
- c语言16进制与字符串互转,C语言版的16进制与字符串互转函数
- Gradle从入门到实战 - Groovy基础(by任玉刚)读后笔记
- 项目管理-项目范围说明书
- 深度学习/机器学习入门基础数学知识整理(八):中心极限定理,一元和多元高斯分布
- Windows10更新错误显示0x8000ffff,易升更新0xc1900107
- python 程序员待遇_python程序员待遇如何
- 颠覆传统营销的新媒体营销-微博营销
- ES实现自动补全查询
- Mini 车迷的「终极乐趣方程式」快看看地表最强乐趣小车JCW
- Linux的起源:从一个故事说起
- excel根据不同的条件模糊匹配,替换,做计算
- python中import random_[零基础学python]Import 模块
- 求数组中的最大差值或最小差值