如何使用opencv实时读取且对图像二值化?

未小帅 2015-03-25 02:23:24
如题,最近刚接触opencv,要做个简单的东西

摄像头读取到一个物体,要计算出物体的位移和倾斜角度。

我是分 读取,处理2步做的。现在是怎样都没办法将这两步合并到一起

请高手们指点。

下面给代码
...全文
1929 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2015-04-03
  • 打赏
  • 举报
回复
摄像头读取到一个物体,要计算出物体的位移和倾斜角度。 : http://blog.csdn.net/wangyaninglm/article/details/43959947
赵4老师 2015-03-25
  • 打赏
  • 举报
回复
建议楼主先编译链接调试OpenCV自带的相关例子代码。
未小帅 2015-03-25
  • 打赏
  • 举报
回复

#include "stdio.h"  
#include "cv.h"  
#include "highgui.h"  
#include "Math.h"  

int main()  
{  
	
	IplImage *src = cvLoadImage("f:\\p\\zft5.jpg", 0);

	IplImage *dsw = cvCreateImage(cvGetSize(src), 8, 1);  
	IplImage *dst = cvCreateImage(cvGetSize(src), 8, 3);  
	CvMemStorage *storage = cvCreateMemStorage(0);  
	CvSeq *first_contour = NULL;  

	//二值图像
	cvThreshold(src, dsw, 100, 255, CV_THRESH_BINARY);  

	cvFindContours(dsw, storage, &first_contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);  
	cvZero(dst);  
	int cnt = 0;  
	double area;
	for(; first_contour != 0; first_contour = first_contour->h_next)  
	{  
		cnt++;  
		area = fabs(cvContourArea(first_contour, CV_WHOLE_SEQ)); //获取当前轮廓面积像素
		if(area>10000&&area<100000)                              // 设10k<area<100k
		{
			CvScalar color = CV_RGB(rand()&255, rand()&255, rand()&255); 
			cvDrawContours(dst, first_contour, color, color, 0, 2, CV_FILLED, cvPoint(0, 0));  
			CvRect rect = cvBoundingRect(first_contour,0);
			cvRectangle(dst, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height),CV_RGB(255, 0, 0), 1, 8, 0);
			CvBox2D a = cvMinAreaRect2(first_contour,0);
			//printf("  坐标   X=%d--Y=%d\n",rect.x,rect.y);
			printf("  角度   %f\n",a.angle );
			printf("  面积   %f\n", area);
			printf("  中心   X=%f--Y=%f",a.center.x ,a.center.y );
		}
	} 

	cvNamedWindow( "原图", 1 );  
	cvShowImage( "原图", src );  

	cvNamedWindow( "轮廓图", 1 );  
	cvShowImage( "轮廓图", dst );  

	cvWaitKey(-1);  

	// 销毁窗口
	cvDestroyWindow("原图");
	cvDestroyWindow("轮廓图");
	// 释放图像
	cvReleaseImage(&dsw);
	cvReleaseImage(&dst);
	cvClearMemStorage(storage);
	cvReleaseMemStorage(&storage);

	return 0;  
} 
这个是处理的。 但是两个程序合璧到一个程序,总是出问题,还请前辈本指点
未小帅 2015-03-25
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "cv.h"
#include "highgui.h"
int main()
{
    cvNamedWindow("test");
    CvCapture* capture=cvCreateCameraCapture(0);
    IplImage* frame;
    while((frame=cvQueryFrame(capture))!=NULL)
    {
		//_sleep(100);
        cvShowImage("test",frame);
		//cvSaveImage("F:\\O\\pic.bmp",frame);
        char c=cvWaitKey(40);
        if(c==27) break;  //按esc键终止程序
    }
    cvReleaseImage( &frame );
	cvDestroyWindow("test");

    return 0;
}
这个是摄像头读取的 ,frame 是 IplImage*型的

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧