小编fmv*_*ior的帖子

无法将参数1从'cli :: interior_ptr <Type>'转换为'CvCapture**'

我按如下方式捕获视频帧

CvCapture *capture = cvCreateFileCapture("PATH");
Run Code Online (Sandbox Code Playgroud)

我可以阅读视频并进行处理.一切正常.但是当我尝试释放捕获时

cvReleaseCapture( &capture ); 
Run Code Online (Sandbox Code Playgroud)

我明白了

error C2664: 'cvReleaseCapture' : cannot convert parameter 1 from
 'cli::interior_ptr<Type>' to 'CvCapture **'
          with
          [
              Type=CvCapture *
          ]
          Cannot convert a managed type to an unmanaged type
Run Code Online (Sandbox Code Playgroud)

该函数在一个类中.

public ref class Locator
Run Code Online (Sandbox Code Playgroud)

我从主要的那个叫它

定位器r;

在我将*public ref*添加到类定位器之前,它没有给我任何错误.

修理它的任何想法?在切换到c ++ - cli之前它工作正常.

我认为它与一些堆问题有关,堆上的项可以由于垃圾收集而移动.为了发送指向本机方法/函数的指针,您需要在调用期间"固定"指针,但我不知道如何.

谢谢.

更新:

修好了.

pin_ptr<CvCapture*> p;
p = &capture;
cvReleaseCapture( p );  
Run Code Online (Sandbox Code Playgroud)

c++ opencv c++-cli

5
推荐指数
1
解决办法
6397
查看次数

线程锁定avcodec_open/close

我有一个c ++ - cli代码,它使用捕获从opencv文件夹中捕获视频,然后使用cvquery框架检索帧.然后我处理帧,一旦处理完所有帧,我就会释放捕获.它工作正常,但当我尝试多线程时,它给了我一个警告,无法捕获文件夹中的一些视频,警告"avcodec_open/close()周围的线程锁定不足".

//for each video in folder do
{
    capture=cvCreateFileCapture(filename);

    while(1)
    {
        img=cvqueryframe(capture) 

        if !img break;
        ///process img
    }

    cvreleasecapture(&capture);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法解决多线程的问题?我在考虑使用

while(!capture) 
    capture=cvCreateFileCapture(filename);
Run Code Online (Sandbox Code Playgroud)

但应该有一个更有效的方法,可能使用锁定Monitor :: Enter(obj)或锁定(obj)?

c++ opencv c++-cli

5
推荐指数
1
解决办法
3578
查看次数

缺少右括号子查询

此查询返回缺少右括号,但是当我运行内部查询时它运行正常.

 select t.id 
 from
 (select
  v.id,
  max(c.image_type_id),
  max(vp.x), 
  max(vp.y),
  max(vp.z)
  FROM
  v,
  vp,
  c,
  WHERE v.id = vp.id 
  AND v.id = c.id
  group by v.id;) t
Run Code Online (Sandbox Code Playgroud)

sql

1
推荐指数
1
解决办法
1415
查看次数

内存泄漏c ++/cli方法

看起来这个方法在调用时会产生内存泄漏.如果我不打电话,那就没有内存泄漏.知道是什么原因引起的吗?

该函数是ac#app调用的c ++/cli dll的一部分.

List<array<Byte>^>^ writejpeg( cv::Mat ovrImagePrevious, List<array<Byte>^>^ overviewOneImages, Dictionary<String^,List<array< Byte >^>^>^ violationAssets, String ^ value, int fileCorruptFlag ) 
{
    vector<uchar> buf1;//buffer for coding
    vector<int> param = vector<int>(2);
    param[0]=CV_IMWRITE_JPEG_QUALITY;
    param[1]=100;//default(95) 0-100
    int img_sz1=ovrImagePrevious.cols*ovrImagePrevious.rows;
    array <Byte>^ hh1 = gcnew array<Byte> (img_sz1);

    if (fileCorruptFlag==1)
    {img_sz1=1;
    hh1=nullptr;}
    else
    {

    cv::imencode(".jpeg", ovrImagePrevious, buf1, param);
    for(int i=0; i <  buf1.size(); i++)
        {
        hh1[i] = buf1[i];
        }

    }

    if(!violationAssets->TryGetValue(value, overviewOneImages))
    {
        overviewOneImages = gcnew List<array<Byte>^>();
        violationAssets->Add(value, overviewOneImages);
    }

    overviewOneImages->Add(hh1);

    return overviewOneImages;


}
Run Code Online (Sandbox Code Playgroud)

更新#1:

当我删除此行时:

overviewOneImages->Add(hh1); …
Run Code Online (Sandbox Code Playgroud)

.net opencv memory-leaks c++-cli visual-c++

0
推荐指数
1
解决办法
323
查看次数

标签 统计

c++-cli ×3

opencv ×3

c++ ×2

.net ×1

memory-leaks ×1

sql ×1

visual-c++ ×1