我使用c#。
public partial class MainForm : Form
{
private CvCapture VideoCapture;
private IplImage frame;
private IplImage imgMain;
public MainForm()
{
InitializeComponent();
}
private void btnVideo_Click(object sender, EventArgs e)
{
double vidWidth, vidHeight;
try
{
VideoCapture = highgui.CvCreateCameraCapture(0);
}
catch (Exception except)
{
MessageBox.Show(except.Message);
}
if (btnVideo.Text.CompareTo("Start Video") == 0)
{
if (VideoCapture.ptr == IntPtr.Zero)
{
MessageBox.Show("badtrip ah!!!");
return;
}
btnVideo.Text = "Stop Video";
highgui.CvSetCaptureProperty(ref VideoCapture, highgui.CV_CAP_PROP_FRAME_WIDTH, 640);
highgui.CvSetCaptureProperty(ref VideoCapture, highgui.CV_CAP_PROP_FRAME_HEIGHT, 480);
highgui.CvQueryFrame(ref VideoCapture);
vidWidth = highgui.cvGetCaptureProperty(VideoCapture, highgui.CV_CAP_PROP_FRAME_WIDTH);
vidHeight = highgui.cvGetCaptureProperty(VideoCapture, highgui.CV_CAP_PROP_FRAME_HEIGHT);
picBoxMain.Width = (int)vidWidth;
picBoxMain.Height = (int)vidHeight;
timerGrab.Enabled = true;
timerGrab.Interval = 42;
timerGrab.Start();
}
else
{
btnVideo.Text = "Start Video";
timerGrab.Enabled = false;
if (VideoCapture.ptr == IntPtr.Zero)
{
highgui.CvReleaseCapture(ref VideoCapture);
VideoCapture.ptr = IntPtr.Zero;
}
}
}
private void timerGrab_Tick(object sender, EventArgs e)
{
try
{
frame = highgui.CvQueryFrame(ref VideoCapture);
if (frame.ptr == IntPtr.Zero)
{
timerGrab.Stop();
MessageBox.Show("??");
return;
}
imgMain = cxcore.CvCreateImage(cxcore.CvGetSize(ref frame), 8, 3);
picBoxMain.Image = highgui.ToBitmap(imgMain, false);
cxcore.CvReleaseImage(ref imgMain);
//cxcore.CvReleaseImage(ref frame);
}
catch (Exception excpt)
{
MessageBox.Show(excpt.Message);
}
}
}
问题是在我打破所有并逐步通过调试器之后,程序停在某个代码处。
它停止的代码在这里:frame = highgui.CvQueryFrame(ref VideoCapture); 错误是它表示无法计算表达式,因为本机帧位于调用堆栈的顶部。
然后当我尝试转移+ F11时。还有另一个错误,说system.accessviolationexception。
堆栈跟踪说:在System.Runtime.InteropServices.Marshal.CopyToManaged(IntPtr源,对象目标,Int32 startIndex,Int32长度) 在CxCore.IplImage.get_ImageDataDb()
这是我在更改使用的c#opencv包装时遇到的错误 从cvlib到cvwrapcs230d。
此项目中使用的DLL也包含在文件夹中。
但是当我将包装器从cvwrapcs230d更改为cvwrap230时,这是 我得到的错误。
第一个注释是第二个使用的cvwrapcs230d包装器 cvwrapcs230包装器。
第一注:cvwrapcs230d -Thrown:“无法加载DLL'cvwrapcpp230':找不到指定的模块。(HRESULT异常:0x8007007E)” (System.DllNotFoundException)异常消息=“无法加载DLL 'cvwrapcpp230':找不到指定的模块。 (例外 来自HRESULT:0x8007007E)“,异常类型= “System.DllNotFoundException”异常消息“无法加载DLL 'cvwrapcpp230':找不到指定的模块。 (例外 来自HRESULT:0x8007007E)“字符串异常 键入“System.DllNotFoundException”字符串 -Thrown:“'cvlib'的类型初始化程序引发了异常。” (System.TypeInitializationException)异常消息=“类型 'cvlib'的初始化程序引发了异常。“,异常类型= “System.TypeInitializationException”异常消息“类型 'cvlib'的初始化程序引发了异常。“字符串异常 键入“System.TypeInitializationException”字符串已停止 例外
第二个注意:cvwrapcs230 -Thrown:“无法加载DLL'cvwrapcpp230':找不到指定的模块。(HRESULT异常:0x8007007E)” (System.DllNotFoundException)异常消息=“无法加载DLL 'cvwrapcpp230':找不到指定的模块。 (例外 来自HRESULT:0x8007007E)“,异常类型= “System.DllNotFoundException”异常消息“无法加载DLL 'cvwrapcpp230':找不到指定的模块。 (例外 来自HRESULT:0x8007007E)“字符串异常 键入“System.DllNotFoundException”字符串 -cvCreateCameraCapture cvlib.cvCreateCameraCapture(index = {unknown})index {unknown} int