多个摄像头同步工作

OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作 因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试:#include "stdafx.h"#include cv.h>#include cxcore.h>#include highgui.h>int main(int argc, _TCHAR* argv[]){ CvCapture* capture1 = cvCreateCame 阅读详情

因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试:


#include "stdafx.h"

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

int main(int argc, _TCHAR* argv[])
{
    CvCapture* capture1 = cvCreateCameraCapture( 0 );
    CvCapture* capture2 = cvCreateCameraCapture( 1 );

    double w = 320, h = 240;
    cvSetCaptureProperty ( capture1, CV_CAP_PROP_FRAME_WIDTH,  w );  
    cvSetCaptureProperty ( capture1, CV_CAP_PROP_FRAME_HEIGHT, h );
    cvSetCaptureProperty ( capture2, CV_CAP_PROP_FRAME_WIDTH,  w );  
    cvSetCaptureProperty ( capture2, CV_CAP_PROP_FRAME_HEIGHT, h );

    cvNamedWindow( "Camera_1", CV_WINDOW_AUTOSIZE );
    cvNamedWindow( "Camera_2", CV_WINDOW_AUTOSIZE );

    IplImage* frame1;
    IplImage* frame2;

    int n = 2;
    while(1)
    {
        frame1 = cvQueryFrame( capture1 );
        if( !frame1 ) break;
        cvShowImage( "Camera_1", frame1 );

        frame2 = cvQueryFrame( capture2 );
        if( !frame2 ) break;
        cvShowImage( "Camera_2", frame2 );

        int key = cvWaitKey(30);
        if( key == 27 ) break;
    }
    cvReleaseCapture( &capture1 );
    cvReleaseCapture( &capture2 );
    cvDestroyWindow( "Camera_1" );
    cvDestroyWindow( "Camera_2" );

    return 0;
}

3

这个程序在使用不同类型的摄像头时,例如我使用一个普通的网络摄像头,另外一个是手机上的摄像头(这款手机具有网络摄像头功能),这样的话程序就能正常运行;但如果摄像头是相同类型时,就只能读取其中一个摄像头的数据了,第二个窗口则是一片灰色。查阅开发文档资料得知 cvCreateCameraCapture(int index) 函数可以选择摄像头,但实际测试发现 cvCreateCameraCapture 只接受 –1 和 0 两种参数,其他值,如1,2,101,102,201,202...全都无法正确的切换到第二个接入的摄像头。如果两个 capture 都使用 cvCreateCameraCapture(-1),是可以切换到第二个摄像头,但当第二次执行 cvCreateCameraCapture() 函数时,会强行弹出选择摄像头的对话框要你手动选择,而且以后再添加摄像头的话,还得修改代码重新build,实际项目中肯定不能这样处理。在OpenCV中文论坛上找到的解释是,如果摄像头的名称是“USB视频设备 #*”,则 OpenCV  只能读取其中一个的数据。

查阅opencv的cvcam官方文档,找到一些资料:

/*
Begin work with cvcam, you can select single or multiple cameras in 2 ways. 
The first is using a camera selection dialog with cvcamSelectCamera. See an example below: 
*/ 

//Prototype 
/*
Pops up a camera(s) selection dialog 
Return value - number of cameras selected (0,1 or 2); 
Argument: an array of selected cameras numbers 
NULL if none selected. Should be released with free() when not needed. 
if NULL passed, not used. 
*/ 
CVCAM_API int cvcamSelectCamera(int** out); 
Function ThatSelectsCamera() 
{ 
 int* out; 
 int nselected = cvcamSelectCamera(&out); 
 if(nselected>0) 
    printf("the 1-st selected camera is camera number %d", out[0]); 
 if(nselected == 2) 
    printf("the 2-nd selected camera is camera number %d", out[1]); 
 free(out); 
 return; 
} 

/*
Note: if you don’t need selected cameras numbers, simply call cvcamSelectCamera(NULL) 
Note2: Linux version of cvcam currently has no implementation of cvcamSelectCamera. 
*/

//The second, non-dialog way is to use CVCAM_PROP_ENABLE property like this:

int desiredcamera = 0;//for example 
cvcamSetProperty(desiredcamera, CVCAM_PROP_ENABLE,CVCAMTRUE); 

根据上述说明,我找到了下面这段对应的代码,不过应该是用 VC6+OpenCV1.0 写的,在我的机子上(VS2008+OpenCV2.0)运行不了,不能验证是否有效,不过还是贴出来供大家讨论:

#include <cvcam.h>
#include <cv.h>
#include <highgui.h>
#include "stdio.h"
#include <windows.h>

void StereoCallback(IplImage *frame1,IplImage *frame2);
void onMouse(int Event,int x,int y,int flags,void *param);

IplImage *image1,*image2;

char *strleft[4]={"left1.bmp","left2.bmp","left3.bmp","left4.bmp"};
char *strright[4]={"right1.bmp","right2.bmp","right3.bmp","right4.bmp"};

void main()
{
    HWND CaptureWindow1=0;
    HWND CaptureWindow2=0;
    

//int ncams=cvcamGetCamerasCount(); //获取摄像头的个数
//用对话框的形式来选取摄像头
    int *CameraNumber;
    int nSelected = cvcamSelectCamera(&CameraNumber);

/* //灰色图像
    image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,1);
    image2=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,1);
*/

//彩色图像
    image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);
    image2=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);

//初始化两个摄像头
        cvNamedWindow("cvcam1 Window",1);
        CaptureWindow1=(HWND)cvGetWindowHandle("cvcam1 Window");
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_ENABLE, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_RENDER, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[0], CVCAM_PROP_WINDOW, &CaptureWindow1);
        cvSetMouseCallback("cvcam1 Window",onMouse,0);
    
        cvNamedWindow("cvcam2 Window",1);
        CaptureWindow2=(HWND)cvGetWindowHandle("cvcam2 Window");
        cvcamSetProperty(CameraNumber[1], CVCAM_PROP_ENABLE, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[1], CVCAM_PROP_RENDER, CVCAMTRUE);
        cvcamSetProperty(CameraNumber[1], CVCAM_PROP_WINDOW, &CaptureWindow2);

//让两个摄像头同步    
        cvcamSetProperty(CameraNumber[0], CVCAM_STEREO_CALLBACK,(void *)&StereoCallback);    

//启动程序
    cvcamInit();
    cvcamStart();
    cvWaitKey(0);

    cvcamStop();
    cvcamExit();
    free(CameraNumber);
    cvDestroyWindow("cvcam1 Window");
    cvDestroyWindow("cvcam2 Window");
}

void StereoCallback(IplImage* frame1,IplImage *frame2)
{
/*   //把图像转换成灰度图并保存到image中
    cvCvtColor(frame1,image1,CV_RGB2GRAY);
    cvCvtColor(frame2,image2,CV_RGB2GRAY);
    */

//拷贝图像到全局变量image中 该函数这样用存在问题 
    cvCopy(frame1,image1);
    cvCopy(frame2,image2);
//    image1=cvCloneImage(frame1);
//    image2=cvCloneImage(frame2);
    //对截取的图像翻转
    cvFlip(image1,image1,0);
    cvFlip(image2,image2,0);
}

void onMouse(int Event,int x,int y,int flags,void *param)
{    
    static int num=0;
        if(Event==CV_EVENT_LBUTTONDOWN)
        {
        if(num==4)num=0;//只是固定定义了保存4张图片,为了不让程序非法而设置的复原
            cvcamPause();
            //图像保存
        cvSaveImage(strleft[num],image1);    
        cvSaveImage(strright[num],image2);
        //    cvSaveImage("left.bmp",image1);
        //    cvSaveImage("right.bmp",image2);

        }
        if(Event==CV_EVENT_RBUTTONDOWN)
        {
            cvcamResume();
            num++;
        }        
}

在论坛上找了很久,最终找到了解决办法,即利用于仕琪老师提供的DirectShow视频采集方案(http://www.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F)。该方案介绍的CCameraDS类调用采集函数可直接返回IplImage,使用更方便,且集成了DirectShow,勿需安装庞大的DirectX/Platform SDK。

4

利用该方案提供的例程,结合上一篇笔记中单窗口显示多个视频子图像的程序,就实现了读取两个摄像头的数据、并进行实时边缘检测的功能,主函数代码如下:

//////////////////////////////////////////////////////////////////////
// Multiple Cameras Capture using DirectShow
// Author: Yuhua Zou
// Thanks to:
//      Shiqi Yu (shiqi.yu@gmail.com)
//        HardyAI@OpenCV China
//        flymanbox@OpenCV China (for his contribution to function CameraName, and frame width/height setting)
// Last modification: October 8, 2009
//////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////
// 使用说明:
//  在 VC6 开发环境下的使用说明:
//   1. 将CameraDS.h CameraDS.cpp以及目录DirectShow复制到你的项目中
//   2. 菜单 Project->Settings->Settings for:(All configurations)->C/C++->Category(Preprocessor)->Additional include directories
//      设置为 DirectShow/Include
//   3. 菜单 Project->Settings->Settings for:(All configurations)->Link->Category(Input)->Additional library directories
//      设置为 DirectShow/Lib
//  在 VS2005/2008 开发环境下的使用说明:
//   1. 将CameraDS.h CameraDS.cpp复制到你的项目中
//   2. 将DirectShow复制到你的opencv根目录下,菜单 工具->选项->项目和解决方案->vc++目录,把..(你的opencv安装目录)/DirectShow/Include添加到
//     “引用文件”中$(VCInstallDir)PlatformSDK/include和$(FrameworkSDKDir)include下面任意位置
//   3. 菜单 工具->选项->项目和解决方案->vc++目录,把..(你的opencv安装目录)/DirectShow/Lib添加到“库文件”下面。也可参考使用说明3。
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "camerads.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>
#include <stdarg.h>
#include <time.h>

// 单窗口显示多幅图像的函数
void cvShowMultiImages(char* title, int nArgs, ...) 
{
   // 略,详见学习笔记(5)
}


int main( int argc, char** argv ) 
{
    int cam_count;

    //仅仅获取摄像头数目
    cam_count = CCameraDS::CameraCount();
    printf("There are %d cameras./n", cam_count);


    //获取所有摄像头的名称
    for(int i=0; i < cam_count; i++)
    {
        char camera_name[1024];  
        int retval = CCameraDS::CameraName(i, camera_name, sizeof(camera_name) );

        if(retval >0)
            printf("Camera #%d's Name is '%s'./n", i, camera_name);
        else
            printf("Can not get Camera #%d's name./n", i);
    }

    if(cam_count==0)
        return -1;

    // 创建2个摄像头类
    CCameraDS camera1;
    CCameraDS camera2;    
    
    //打开第一个摄像头
    //if(! camera.OpenCamera(0, true)) //弹出属性选择窗口
    if(! camera1.OpenCamera(0, false, 320,240)) //不弹出属性选择窗口,用代码制定图像宽和高
    {
        fprintf(stderr, "Can not open camera./n");
        return -1;
    }
    //打开第二个摄像头
    camera2.OpenCamera(1, false, 320,240);
    
    
    cvNamedWindow("Multiple Cameras");

    // 初始化在子图像中显示字符的字体格式
    CvFont tFont;
    cvInitFont(&tFont,  CV_FONT_HERSHEY_COMPLEX, 0.5f,0.7f,0,1,8);
   
    char cam1str[] = "Camera #1";
    char cam2str[] = "Camera #2";

    // 为读取系统时间信息分配内存
    char timestr[25];
    memset(timestr, 0, 25 * sizeof(char));   
    
    while(1)
    {
        //获取一帧
        IplImage *pFrame1 = camera1.QueryFrame();
        IplImage *pFrame2 = camera2.QueryFrame();
        
        // 获取当前帧的灰度图
        IplImage* frame_gray_1 = cvCreateImage(cvGetSize(pFrame1),pFrame1->depth,1);
        IplImage* frame_gray_2 = cvCreateImage(cvGetSize(pFrame2),pFrame2->depth,1);
        cvCvtColor(pFrame1,frame_gray_1,CV_RGB2GRAY);
        cvCvtColor(pFrame2,frame_gray_2,CV_RGB2GRAY);
      
        // 对灰度图像进行Canny边缘检测
        // 然后将图像通道数改为三通道
        IplImage* frame_canny_1 = cvCreateImage(cvGetSize(pFrame1),pFrame1->depth,1);
        IplImage* frame_canny_2 = cvCreateImage(cvGetSize(pFrame2),pFrame2->depth,1);
        IplImage* frame1 = cvCreateImage(cvGetSize(pFrame1),pFrame1->depth,pFrame1->nChannels);
        IplImage* frame2 = cvCreateImage(cvGetSize(pFrame2),pFrame2->depth,pFrame2->nChannels);
        cvCanny(frame_gray_1,frame_canny_1,20,75,3);
        cvCanny(frame_gray_2,frame_canny_2,20,75,3);
        cvCvtColor(frame_canny_1,frame1,CV_GRAY2BGR);
        cvCvtColor(frame_canny_2,frame2,CV_GRAY2BGR);

        
        // 获取系统时间信息
        time_t rawtime; 
        struct tm* timeinfo; 

        rawtime = time( NULL ); 
        timeinfo = localtime( &rawtime ); 
        char* p = asctime( timeinfo );
      
        // 字符串 p 的第25个字符是换行符 '/n'
        // 但在子图像中将乱码显示
        // 故仅读取 p 的前 24 个字符
        for (int i = 0; i < 24; i++)
        {
            timestr[i] = *p;
            p++;
        }
        p = NULL;
        
        // 在每个子图像上显示摄像头序号以及系统时间信息
        cvPutText( pFrame1, cam1str, cvPoint(95,15), &tFont,  CV_RGB(255,0,0) );
        cvPutText( pFrame2, cam2str, cvPoint(95,15), &tFont,  CV_RGB(255,0,0) );
        cvPutText( frame1,  cam1str, cvPoint(95,15), &tFont,  CV_RGB(255,0,0) );
        cvPutText( frame2,  cam2str, cvPoint(95,15), &tFont,  CV_RGB(255,0,0) );

        cvPutText( pFrame1, timestr, cvPoint(5,225), &tFont,  CV_RGB(255,0,0) );
        cvPutText( pFrame2, timestr, cvPoint(5,225), &tFont,  CV_RGB(255,0,0) );
        cvPutText( frame1,  timestr, cvPoint(5,225), &tFont,  CV_RGB(255,0,0) );
        cvPutText( frame2,  timestr, cvPoint(5,225), &tFont,  CV_RGB(255,0,0) );
        
        // 显示实时的摄像头视频
        cvShowMultiImages( "Multiple Cameras", 4, pFrame1, pFrame2, frame1, frame2 );

      
        //cvWaitKey(33);
        int key = cvWaitKey(33);
        if( key == 27 ) break;

        cvReleaseImage(&frame1);
        cvReleaseImage(&frame2);
        cvReleaseImage(&frame_gray_1);
        cvReleaseImage(&frame_gray_2);
        cvReleaseImage(&frame_canny_1);  
        cvReleaseImage(&frame_canny_2); 
    }
    
    camera1.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头
    camera2.CloseCamera();

    cvDestroyWindow("Multiple Cameras");

    return 0;
}

在 Project -> Properties -> Configuration Properties -> Linker -> Input 的 Additional Dependencies 中,需要添加以下库文件:
odbc32.lib
odbccp32.lib
cv200.lib
cxcore200.lib
highgui200.lib

在编译以上程序时,可能会出现以下几种错误(参见 http://topic.youkuaiyun.com/u/20081022/12/30fb745f-332b-42f7-bbee-02a760c48132.html):

1> ../../../winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support 
2> ../../../winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
3> ../../../winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'

对于第1类错误,可以用wd4430来解决,具体的在Project -> Properties -> Configuration Properties -> Linker -> Command Line的 Additional Options 中添加 ‘/wd4430’  即可。

对于第2类错误,一般可通过调整 DirectShow/Include 在 Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for –> Include Files 中的位置(把它下移到最下面),然后把 Project -> Properties -> Configuration Properties –> C/C++ 中的 Additional Include Directories 里面的内容(../../../../include)删掉,重新编译,PVOID64的错误就会消失,原因如下:

POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8/VC/PlatformSDK/Include/basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变 include files 的优先级即可。

当然,也可以改写 winnt.h 中的代码,在下面这两行:
typedef  void  *PVOID; 
typedef  void  *POINTER_64  PVOID64;
之前增加一行:
#define  POINTER_64  __ptr64
不过最好不要轻易改写 winnt.h 。

opencv+directshow实现4个摄像头同步采集图像 基于网上许多人说到opencv打不开4个摄像头,事实果真如此么,记得哦:opencv是开源的,所以本作者我利用vs2013自己配置了一下opencv与directshow的开发环境,具体要怎么配置我就不详细讲了,上网搜一下就能找得到了,下面我详细讲一下如何将mfc和多线程与opencv和directshow结合实现4个摄像头同步采集图像,本作者正读大二,能力有限,有更好的方法也告诉我一下哈。 阅读详情

相关推荐

摄像头显示OpenCV或DirectShow

摄像头显示OpenCV或DirectShow     对于OpenCV和DirectShow应该是没有哪个比哪个强,而是他们各有各的用处,如DirectShow用于视频采集容易些,而OpenCV用于图像处理容易些。我觉得现在通常是两者相结合的,单独使用的话都会有些缺点,可以去OpenCV中文网站上,那里有很多两者结合使用的例子。     为什么用DirectShow?在视频采集方面,Direc

HyacinthKiss的专栏 2783

Win10下VS2015配置DirectShow+OpenCV并且多摄像头的采集

最近正好要用个比较小的摄像头用来采集图像,就买了一个USB接口的工业内窥镜摄像头,发现用opencv打开摄像头出现imshow()显示的时候一闪而过。表示摄像头是打开了,但是采集不了。最后了解了一下,常用的USB摄像头和笔记本本身自带的摄像头不是一个类型的,imshow()获取不了这种类型的摄像头。   还有网上各种解决方法,基本都不正确,出现这种选择某种摄像头的方法,在真正使用中不实用而...

spw_1201的博客 4710

建议收藏:华为海思IC设计笔试题,含解析(附下载)

接触过的部门有麒麟芯片、CPU/GPU,总体面试感觉非常好,规范且认真,第一轮手撕代码状态机+复盘机考题+瞄准几个知识点深挖,时间1hour+;一二轮面试是连着的,所以很累。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。时序电路有记忆功能,不会产生锁存器,锁存器一般在组合逻辑中case写不全,else写不全,或者敏感列表写不全。

nuoweishizi的博客 3289

Opencv搭配Directshow获取高帧率摄像头数据

目前需要高帧率摄像头数据,而opencv中默认读取视频YUY2,640*480,30fps。作为初学者,解决这个问题花了好大力气所以在此记录我的USB摄像头最高支持MJPG640*480,120fps,YUY2流最高30fps.如果想显示,必须读取MJPG格式视频流查到Opencv默认使用VFW控件,似乎能换。尝试1:使用OpenCV3.3,VS2107,64位Dbug调试,写了如下代码配置,不能...

LongXiaoYue0的博客 5908

手把手教你用CEFSharp打造防关联指纹浏览器(附完整代码)

本文详细介绍了如何基于CEFSharp框架,从零开始构建一个企业级的防关联指纹浏览器。通过剖析核心架构、多进程隔离实现、动态指纹混淆(如Canvas、WebGL)的实战代码,以及代理集成与性能优化,为跨境电商、广告投放等场景提供了一套可控、安全的开源解决方案。

fern8的博客 963

基于Arduino与脑电模块的意念控制LED灯环实现

脑机接口(BCI)技术通过采集和处理脑电信号,实现人脑与外部设备的直接交互。其核心原理是利用传感器捕捉大脑活动产生的微弱电信号,经过放大、滤波和特征提取,转换为可识别的指令。这项技术在医疗康复、神经反馈训练和人机交互等领域具有重要价值。本文聚焦于一个具体的工程实践:使用消费级NeuroSky TGAM模块采集专注度与放松度数据,通过Arduino平台解析信号,并驱动WS2812B LED灯环实现实时可视化反馈。项目涵盖了硬件选型、电路搭建、数据解析和光效映射等关键环节,为脑机接口入门和嵌入式开发提供了完整的

weixin_28721917的博客 282

opencv多摄像头配准_基于 VC+OpenCV+DirectShow 的多个摄像头同步工作[转]

分类: 机器视觉2009-10-08 21:05 20094人阅读 评论(66) 收藏 举报因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试: #include "stdafx.h"#include #include #include int main(int argc, _TCHAR* argv[]){CvCapture* capture1 = cvCreateCamera...

weixin_36480303的博客 760

解决屏幕不亮难题:慷智SerDes DE信号极性配置避坑指南

本文深入探讨了基于慷智AIM95x系列SerDes芯片的嵌入式显示系统开发中,因DE信号极性配置不匹配导致屏幕不亮的典型故障。文章详细解析了DE信号的核心作用与极性定义,提供了慷智SerDes芯片中DE极性寄存器的具体配置方法与调试记录,并给出了从隔离问题、对比时序到波形验证的系统性排查流程,帮助工程师快速定位并解决此类隐蔽问题。

weixin_29185493的博客 141

基于 VC+OpenCV+DirectShow 的多个摄像头同步工作

因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试: #include "stdafx.h" #include #include #include int main(int argc, _TCHAR* argv[]) { CvCapture* capture1 = cvCreateCameraCapture( 0 ); CvCapture* cap

尸姐II的专栏 2704

避坑指南:RK3588视频编码与SRT推流实战中,我遇到的5个典型问题及解决方案

本文深度解析RK3588平台视频编码与SRT推流实战中的五个典型问题,包括MIPI摄像头内存对齐、多线程数据传递、FFmpeg时间戳设置、SRT连接参数调优及系统资源监控。提供具体解决方案和优化技巧,帮助开发者高效实现实时视频网络传输。

weixin_28718793的博客 324

从FreeCAD到BIMBase:PlaneGCS约束求解器的移植使用指南

本文为BIMBase平台的开发者提供了一份详细的PlaneGCS几何约束求解器移植与集成指南。文章深入探讨了如何从FreeCAD中提取PlaneGCS核心代码,并将其适配到BIMBase的C++二次开发环境中,重点解决了内存管理、数据模型桥接、约束抽象以及性能调优等关键问题,旨在帮助开发者构建稳定高效的参数化设计模块。

weixin_29213525的博客 321

多个摄像头同步工作【转】

因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试: #include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> int main(int argc, _TCHAR* argv[]) { CvCapture* capt...

weixin_30779691的博客 234

10天冲刺国自然基金!用这套实战AI提示词指令教程,助你中标率翻倍!亲测DeepSeek和ChatGPT不好用

虽然以上国自然提示词指令经过反复实测,但并不是万能无脑帮你搞定所有,大模型AI的特性是你专业领域能力越强,它的智商表现就会更加强大,通过以上提示词教程的使用,大大提升中标概率是肯定的。还有就是大模型的使用上,不是市面上大家都说好的就一定适用,目前来看,Gemini和Claude的两个模型是非常适合国自然本子的修改的。在使用大模型进行国自然本子撰写修改时,首先是角色的设定,然后是目标和背景的描述,好用的提示词指令都是要经过无数次的实测,比对输出结果后又反复调整,达到最佳的效果状态的提示词指令。

智能AI让学术科研更容易 1247

基于 VC+OpenCV+DirectShow 的多个摄像头同步工作[转]

OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作 分类: 机器视觉2009-10-08 21:05 20094人阅读 评论(66) 收藏 举报 imagepropertiescamincludepreprocessorlinker 因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试: #include "stdafx.h" ...

weixin_30462049的博客 385

大模型系列——Ollama简明教程

在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——

2401_84052244的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenCV學習筆記(6)基於 VC+OpenCV+DirectShow 的多個攝像頭同步工作

http://blog.youkuaiyun.com/chenyusiyuan/article/details/4643313 因項目需要采集2個攝像頭的數據進行雙目檢測,一開始采用以下代碼來測試: #include "stdafx.h" #include cv.h> #include cxcore.h> #include highgui.h> int main(int argc, _T

I am Rocky 6701

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

多线程实现同步摄像头拍摄照片(Multi-threading to achieve synchronized camera shooting photos)

下面展示一些 内联代码片。 多线程实现同步摄像头拍摄照片(Multi-threading to achieve synchronized camera shooting photos) // A code block var foo = 'bar'; // An highlighted block import cv2 import multiprocessing import time img_path='C:/Robot/pic/123.jpg' #Save picture function de

xingzhiyuan000的博客 495

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

终极指南:如何用OBS虚拟摄像头实现多应用视频同步分发

你是否曾在视频会议中手忙脚乱地切换摄像头?或者需要在多个直播平台同时推流却苦于设备限制?今天我将为你揭秘一款能彻底改变视频工作流的强大工具——obs-virtual-cam,它能让你的OBS画面像水一样流向不同的应用程序。 ## 解决真实痛点:告别单一输出的困境 想象一下这个场景:你正在用OBS进行游戏直播,同时需要将画面实时分享到视频会议和录制软件中。传统的方案需要购买多个摄像头或使用复杂的

gitblog_00874的博客 736

Chrony 深度解析:精准时间同步的核心工具

摘要: 《Yocto项目实战教程》提供内地简体版(京东可购)与海外繁体版(金石堂可购),助力开发者掌握嵌入式Linux定制技术。Chrony作为高精度时间同步工具,专为嵌入式、AI边缘计算及多摄像头系统设计,支持NTP/RTC混合同步。文章详解其原理、安装配置及实战案例,包括嵌入式设备冷启动时间校准与多摄像头视觉同步方案,确保系统时间戳一致性(误差<10ms)。通过chronyc命令可实时监控同步状态,提升分布式AI推理与传感器融合的可靠性。

Interview_TC的博客 1407

摄像头结构及工作原理

传感器:摄像头结构及工作原理

puppyoo的博客 2万+
上一篇: 在单个窗口中显示多个视频子窗口
下一篇: MFC+openCV对话框中显示视频
wanglp094
博客等级 码龄22年 144粉丝 3原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值