资源简介
刚学OPENCV时用来练习的一段小代码,刚进入OPENCV的可以参考下
代码片段和文件信息
// 图像中的线段检测
#include
using namespace std;
#pragma comment(linker “/subsystem:\“windows\“ /entry:\“mainCRTStartup\““)
IplImage *pCannyImage*pSrcImage;
//const char *pstrWindowsCannytitle = “边缘检测图“;
const char *pstrWindowsLineName = “线段检测“;
CvMemStorage *pcvMStorage;
IplImage *pColorImage;
//cvCreateTrackbar的回调函数
void on_trackbar(int threshold)//threshold 为阈值
{
//canny边缘检测
cvCanny(pSrcImagepCannyImagethresholdthreshold*33);
//cvShowImage(pstrWindowsCannytitlepCannyImage);
//cvSmooth(pCannyImage pCannyImage);
// 线段检测(只能针对二值图像)
pcvMStorage = cvCreateMemStorage();
double fRho = 1;
double fTheta = CV_PI / 180;
int nMaxLineNumber = 50; //最多检测条直线
double fMinLineLen = 100; //最小线段长度
double fMinLineGap = 10; //最小线段间隔
CvSeq *pcvSeqLines = cvHoughLines2(pCannyImage pcvMStorage CV_HOUGH_PROBABILISTIC fRho fTheta nMaxLineNumber fMinLineLen fMinLineGap);
// 绘制线段
pColorImage = cvCreateImage(cvGetSize(pSrcImage) IPL_DEPTH_8U 3);
cvCvtColor(pCannyImage pColorImage CV_GRAY2BGR);
int i;
for(i = 0; i < pcvSeqLines->total; i++)
{
CvPoint* line = (CvPoint*)cvGetSeqElem(pcvSeqLines i);
cvLine(pColorImage line[0] line[1] CV_RGB(25500) 2);
}
cvShowImage(pstrWindowsLineName pColorImage);
}
int main()
{
const char *pstrWindowsSrctitle = “原图“;
// 从文件中加载原图
pSrcImage = cvLoadImage(“原图.jpg“ CV_LOAD_IMAGE_UNCHANGED);
// 灰度图
IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage) IPL_DEPTH_8U 1);
cvCvtColor(pSrcImage pGrayImage CV_BGR2GRAY);
// 边缘图
pCannyImage = cvCreateImage(cvGetSize(pSrcImage) IPL_DEPTH_8U 1);
//cvCanny(pGrayImage pCannyImage 56 168);
//cvNamedWindow(pstrWindowsCannytitleCV_WINDOW_AUTOSIZE);
//Create Windows
cvNamedWindow(pstrWindowsSrctitle CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsSrctitle pSrcImage);
cvNamedWindow(pstrWindowsLineName CV_WINDOW_AUTOSIZE);
//Create TrackBar
const char *pstrWindowsToolBar = “Threshold“;
int nThresholdEdge = 1;
cvCreateTrackbar
(pstrWindowsToolBarpstrWindowsLineName&nThresholdEdge100on_trackbar);
//Show the Image
on_trackbar(1);
cvWaitKey(0);
cvReleaseMemStorage(&pcvMStorage);
cvDestroyWindow(pstrWindowsSrctitle);
cvDestroyWindow(pstrWindowsLineName);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pGrayImage);
cvReleaseImage(&pCannyImage);
cvReleaseImage(&pColorImage);
return 0;
}
/*在《【OpenCV入门指南】第五篇轮廓检测上》与《【OpenCV入门指南】第六篇轮廓检测下》讲解了OpenCV的轮廓检测。本篇将讲解在OpenCV中使用线段检测与圆检测。
线段检测与圆检测主要运用Hough变换,Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线进行识别。
在OpenCV编程中,线段检测和圆检测已经封装成函数了,直接使用cvHoughLines2和cvHoughCircles即可,下面来看看函数介绍和实际代码。
《OpenCV入门指南》系列文章地址:http://blog.csdn.net/morewindows/article/category/863841
函数功能:检测图像中的线段
函数原型:
CvSeq* cvHoughLines2(
CvArr* image
void* line_storage
int method
double rho
double theta
int th
- 上一篇:AES 加解密c++
- 下一篇:NUR算法和OPT算法实现-----操作系统实验
相关资源
- 基于CCS和ICETEK5509实验箱FFT算法的C语言
- 基于哈夫曼编码的文件压缩解压程序
- 相机标定与图像畸变校正程序
- moravec算子c++代码
- 基于89c52单片机的八路抢答器 可加减
- 基于C语言的图片放大与缩小
- 基于omnet++的LEACH协议仿真
- 基于mfcvc++6.0的图书馆管理系统
- 基于视频车辆测速代码
- 基于单片机的水位控制系统
- 基于C语言的矩阵乘法
- 基于遗传算法的最短路径的程序的开
- openCV中stitching_detailed.cpp
- 基于单片机的LED彩灯控制器设计
- 基于Windows Socket的安全通信(C++实现)
- 11个常用OpenCV+C++图像处理
- C++二叉树基于Mfc的程序开发
- opencv计算5*5邻域方差图
- 简单的n皇后基于MFC
- 基于Linux消息队列的简易聊天室(C语
- 基于C语言实现的网络爬虫
- opencv 视觉 追踪跟踪 经典kcf算法
- 基于linux下的图像缩小 c语言
- MFC基于多线程的聊天程序用了winsock套
- 白平衡算法,包含灰色世界法,完美
- 基于linux系统下的C银行模拟系统文件
- 基于无限射频卡的饭卡充值系统MFC
- 基于VS2010的C++小学生四则算数测试系
- 基于Qt的直升机运行
- 基于c/c++实现的宿舍管理系统可做小型
评论
共有 条评论