基于opencv技术获取视频流像素坐标
2014-06-03 20:55
701 查看
最近一直在学习opencv和研究图像以及摄像头处理,看到网上很多贴出的文章都是对于图片的处理以及图片中坐标获取,而对于摄像头模块没却没有获取坐标的办法,我自己研究了一段时间后结合别人给出的方法对于摄像头下视频流坐标获取方式给出了两种方式的代码:
第一种:需要鼠标点击才可以获取坐标的方式:
第二种:鼠标移动即可获取坐标,可用来对于某些特殊像素点坐标的获取:
这是在鼠标移动不需要点击就可以获取坐标的方式,但是由于没有处理好视频流问题,导致视频不够流畅主要是cvWaitKey()函数的处理需要注意下,我这个会导致内存不足而出现视频卡的情况,希望有人可以解决下!
代码不是很长,所以没有加注释,调用的基本上都是库函数,多多包涵
第一种:需要鼠标点击才可以获取坐标的方式:
#include <cv.h> #include <highgui.h> #include <stdio.h> IplImage *frame = NULL; /******************************处理函数部分*************************/ void on_mouse(int event, int x, int y, int flags, void* ustc) { CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA); if (event == CV_EVENT_LBUTTONDOWN) { CvPoint pt = cvPoint(x, y); char temp[16]; sprintf(temp, "(%d,%d)", pt.x, pt.y); cvPutText(frame, temp, pt, &font, cvScalar(255, 255, 255, 0)); cvCircle(frame, pt, 2, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0); cvShowImage("paper", frame); } } /*******************主函数部分***************************/ int main() { CvCapture* pCap = cvCreateCameraCapture(0); cvNamedWindow("getpoint", CV_WINDOW_AUTOSIZE); while ((frame = cvQueryFrame(pCap)) != 0 && cvWaitKey(20) != 27) { frame = cvQueryFrame(pCap); cvShowImage("getpoint", frame); cvSetMouseCallback("getpoint", on_mouse, 0); } cvReleaseCapture(&pCap); cvDestroyWindow("getpoint"); return 0; }代码部分不是很长,但是要注意的是摄像头和图片处理方式的不同,而且鼠标点击的方式不会很耗内存,所以不是很卡,视频流畅,根据以上代码部分即可获取整个摄像头下的视频流下的坐标了;
第二种:鼠标移动即可获取坐标,可用来对于某些特殊像素点坐标的获取:
#include <cv.h> #include <highgui.h> #include <stdio.h> IplImage *frame = NULL; IplImage* point=0; /**************************定义鼠标移动函数*****************/ void on_mouse( int event, int x, int y, int flags, void* ustc) { CvFont font; cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA); if( event == CV_EVENT_MOUSEMOVE ) { cvCopy(point,frame); CvPoint pt = cvPoint(x,y); char temp[16]; sprintf(temp,"(%d,%d)",pt.x,pt.y); cvPutText(frame,temp, pt, &font, cvScalar(255, 255, 255, 0)); cvCircle( frame, pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 ); cvShowImage( "paper", frame ); } } /*******************************主函数部分************************/ int main() { CvCapture* pCap = cvCreateCameraCapture(0); point=cvCloneImage(frame); cvNamedWindow("getpoint",1); cvSetMouseCallback( "getpoint", on_mouse, 0 ); cvShowImage("getpoint",frame); cvWaitKey(0); cvDestroyAllWindows(); cvReleaseImage(&frame); cvReleaseImage(&point); return 0; }
这是在鼠标移动不需要点击就可以获取坐标的方式,但是由于没有处理好视频流问题,导致视频不够流畅主要是cvWaitKey()函数的处理需要注意下,我这个会导致内存不足而出现视频卡的情况,希望有人可以解决下!
代码不是很长,所以没有加注释,调用的基本上都是库函数,多多包涵
相关文章推荐
- 基于opencv在摄像头ubuntu根据视频获取
- opencv根据数组坐标获取像素陷阱
- 基于opencv网络摄像头在ubuntu下的视频获取
- OpenCV获取图片所有对应坐标中的像素值
- 基于opencv在摄像头ubuntu根据视频获取
- 图像处理------基于像素的皮肤检测技术 分类: 视频图像处理 2015-07-24 09:56 28人阅读 评论(0) 收藏
- 基于opencv网络摄像头在ubuntu下的视频获取
- Opencv获取并改变图像的像素值
- PS里面获取像素坐标的方法
- 基于OpenCV+MFC的AVI视频文件读取及运动检测
- OpenCV中获取图像某一像素值
- 用opencv摄像头视频的获取
- OpenCV摄像头视频的获取
- 基于硬件指纹的软件加密和注册技术--获取硬盘物理序列号、CPU序列号、网卡MAC地址、BIOS序列号、主板序列号
- 读取视频文件(基于OpenCV 的C++程序)
- [转]基于OpenCV的PHP图像人脸识别技术
- 基于Media Foundation获取音频视频输入设备列表
- 基于OpenCV的PHP图像人脸识别技术
- [转]基于OpenCV的PHP图像人脸识别技术
- 基于OpenCV的AVI视频文件读取及运动检测