资源简介
刚学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算法实现-----操作系统实验
相关资源
- 基于MFC的TCP调试助手源码95706
- 基于mfc的多线程文件传输
- MFC数字钟(基于VC6.0)
- 基于C语言的密码锁程序
- 基于C语言的模拟退火算法
- 基于C语言实现的网络爬虫(搜索引擎
- 基于STM32单片机的心率体温测量仪
- 基于STM32F103ZET6控制舵机旋转(ts90a/
- QT视频播放器(基于FFmpeg)
- 基于单片机的交通灯设计.doc
- 人脸识别(opencv_facedetect_v4l2)
- 基于Arduino的MLX90614温度采集程序
- 摩托车仪表盘软件(基于STM8)
- 超声波定高(基于STM32)
- 基于esp32的摄像头采集图像代码
- 基于STM32的嵌入式flash读写控制
- 基于arduino的红绿灯程序,包附原理图
- 基于STM32f103 PWM波呼吸灯
- Proteus仿真:基于定时器的可调时钟
- 基于51单片机的温控系统
- 基于STM32F407的W5500 tcpserver(官网例程
- 基于STM32F407ZG的监控摄像头及FATFS文件
- 基于STM32的音频信号采样与FFT分析
- 基于STM32F103C8T6主控板使用BH1750检测光
- 基于CS的TCP文件传输程序设计
- 基于opencv的模板匹配代码
- VC++基于OpenGL模拟的一个3维空间模型
- 基于VC++的SolidWorks二次开发SolidWorks
- opencv图片扫描以及校正
- opencv手部轮廓识别以及轨迹识别
评论
共有 条评论