wen7系统下用vc6.0读取摄像头

本文介绍了一个在wen7+vc6.0+opencv1.0环境下成功实现摄像头读取及图像处理的案例。通过调整系统属性和设置回调函数,可以在该环境下稳定获取摄像头画面并进行图像处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平台:wen7+vc6.0+opencv1.0

读取摄像头本来是很容易实现的,但是还得针对应用什么样的平台,在网上搜的很多代码,在wen7+vc6.0+opencv1.0的平台上就不工作,摄像头画面不是黑的就是会的,但是在xp系统下就可以很好地运行出来,在wen7+vs2010+opencv2.4.4上也能很好的运行出来。看来系统和工具的版本同步很重要。

经过多天努力终于在wen7+vc6.0+opencv1.0的平台上实现了摄像头的读取,当然也能对其数据进行处理。代码如下:

#include <stdio.h>
#include <iostream.h>

#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "highgui.h"

int main(int argc, char* argv[])
{

int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目  
HWND MyWin;  
    // 设置系统属性 
cvcamSetProperty(1, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头     
//camera  
    cvcamSetProperty(1, CVCAM_PROP_RENDER, CVCAMTRUE);  //We'll render stream  
    // 假设创建一个窗口,并且窗口的ID是在变量 MyWin 中定义  
    // MyWin 是窗口 HWND 的类型  
    MyWin = (HWND) cvGetWindowHandle("cvcam window");     
    cvcamSetProperty(1, CVCAM_PROP_WINDOW, &MyWin);   // Selects a window for video rendering 

//回调函数将处理每一帧 
cvcamSetProperty(1, CVCAM_PROP_CALLBACK, callback);

cvcamInit( );  
    cvcamStart( );  
    // 现在程序开始工作  
    cvWaitKey();//等待窗口出现  
    cvcamStop();  
    cvcamExit();
return 0;
}


注:如果想对读取的的帧图像处理,则只需编辑cvcamSetProperty(1, CVCAM_PROP_CALLBACK, callback)中的callback函数,想怎么处理就怎么处理了!

例如:在帧图像中显示蓝线:

void callback(IplImage* image)
{
    IplImage* image1 = image;
    int i,j;
   
    assert (image);
   
    for(i=0; i<image1->height; i+=10)
    {
        for(j=(image1->widthStep)*i;j<(image1->widthStep)*(i+1);
        j+=image1->nChannels)
        {
            image1->imageData[j]  = (char)255;
           image1->imageData[j+1] = 0;
           image1->imageData[j+2] = 0;
        }
     }
}


此方法在学习opencv入门的里中有,估计是最原始的办法吧(个人意见)!


另附:

一般的读取摄像头的代码如下:


#include "cv.h"
#include "highgui.h"

int main(int argc, char** argv) {
    cvNamedWindow("win");

    CvCapture* capture = cvCreateCameraCapture(0);
    IplImage* frame = cvQueryFrame(capture);

    while(1) {
        frame = cvQueryFrame(capture);
        if(!frame) break;
        
        IplImage* out = cvCreateImage(cvGetSize(frame), frame->depth, 1);
        cvCanny(frame, out, 10, 100, 3);

        cvShowImage("win", out);

        cvReleaseImage(&out);

        char c = cvWaitKey(50);
        if(c==27) break;
    }

    cvReleaseCapture(&capture);
    cvDestroyWindow("win");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值