opencv 打开摄像头却捕捉不到图像解决方法

写opencv程序,打开摄像头,不料书上的程序出错,能打开摄像头,但是捕捉不到图像

用兄弟的电脑试过,能运行,没有问题

在网上找了很久,试了很多的方法,都没有用,后来在一个百度知道上找到一个方法成功

http://zhidao.baidu.com/link?url=8I5s8NuD3uID9-8oAYb2uFf-thH6j-i940Tgil9XPpYqwB7olGEEsKg3I3Jm4pPdTnVz1q__ivkXAZ42vvtFpR_3GEqHv1C-iDZZ_Y33Aum


#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

string name="我的";

int main()
{
	VideoCapture capture; //声明视频读入类
	capture.open(0); //从摄像头读入视频 0表示从摄像头读入

	if (!capture.isOpened()) //先判断是否打开摄像头
	{
		cout<<"can not open";
		cin.get();
		return -1;
	}

	namedWindow(name);

	while (1) { 
		Mat cap; //定义一个Mat变量,用于存储每一帧的图像
		capture>>cap; //读取当前帧
		if (!cap.empty()) //判断当前帧是否捕捉成功 **这步很重要
			imshow(name, cap); //若当前帧捕捉成功,显示
		else
			cout<<"can not "; 
		waitKey(30); //延时30毫秒
	}

	return 0;
}



不知各位看到了没有

can not表示程序没有读入图像

这就是我出错的原因,摄像头的第一帧读不进来


最重要的问题解决了,不过出现了一个小的问题,窗口名出现乱码,

这个问题还没有解决

以后解决了再贴上来

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
### 回答1: 要使用OpenCvSharp打开相机,首先需要确保已经安装了OpenCvSharp库并正确配置了项目环境。 接下来,我们可以使用Capture类来打开相机。首先,创建一个Capture对象,可以传入相机的索引号来指定要打开的相机,例如: ```csharp Capture capture = new Capture(0); ``` 这里的索引号0表示打开默认的相机。如果有多个相机连接到计算机,可以根据需要传入不同的索引号。 接下来,我们可以使用Capture对象的Read方法来读取相机捕获到的画面。我们可以在一个循环中连续读取画面,并进行处理。例如: ```csharp while (true) { Mat frame = capture.QueryFrame(); // 在这里进行画面处理,例如显示、保存等操作 Cv2.WaitKey(1); // 等待用户按下按键,做到实时显示 } ``` 在循环中,使用QueryFrame方法获取相机捕获到的画面,返回的是一个Mat对象。我们可以在这个对象上进行图像处理,比如显示、保存等操作。 最后,使用Cv2.WaitKey方法来等待用户按下按键。这个方法的参数表示等待的时间,单位是毫秒。通常将其设置为1或者0,以实现实时显示。 以上就是使用OpenCvSharp打开相机的简单步骤。当不需要使用相机时,记得释放资源,可以使用Capture对象的Dispose方法来进行释放,例如: ```csharp capture.Dispose(); ``` 希望这些信息能够帮助到你! ### 回答2: 要在OpenCvSharp中打开相机,需要进行一些步骤。 首先,需要导入OpenCvSharp的库文件,然后创建一个VideoCapture对象来绑定相机。 接下来,使用OpenCvSharp的方法打开相机,并指定相应的设备索引。一般来说,如果只有一个相机,则索引为0。 然后,可以使用Mat对象来获取相机捕捉的实时帧图像。 最后,使用OpenCvSharp的方法来显示或处理图像。 下面是一个简单的示例代码片段来打开相机并显示实时图像: ```csharp using OpenCvSharp; class Program { static void Main() { using (var videoCapture = new VideoCapture(0)) // 打开相机,设备索引为0 { using (var window = new Window("Camera")) // 创建窗口用于显示图像 { Mat frame = new Mat(); // 用于存储捕捉图像帧 while (true) { videoCapture.Read(frame); // 读取相机捕捉图像帧 // 检查是否成功读取图像帧 if (frame.Empty()) break; window.ShowImage(frame); // 显示图像帧 // 检查按下ESC键 if (Cv2.WaitKey(1) == 27) break; } } } } } ``` 以上代码片段展示了如何使用OpenCvSharp打开相机并实时显示图像。根据你的设备和需求,你可能需要进行一些额外的设置和调整。 ### 回答3: 要使用OpenCVSharp打开相机,首先要确保已经安装了OpenCVSharp库。以下是一个示例代码,可用于打开并获取相机的实时视频流: ``` using OpenCvSharp; class Program { static void Main(string[] args) { using (var capture = new VideoCapture(0)) // 打开摄像头,参数0表示默认摄像头 { using (var window = new Window("Camera Preview")) // 创建窗口用于显示视频流 { Mat frame = new Mat(); while (true) { if (!capture.Read(frame)) // 读取视频帧 break; Cv2.ImShow("Camera Preview", frame); // 显示视频帧 if (Cv2.WaitKey(30) >= 0) // 按ESC键结束 break; } } } } } ``` 以上代码首先创建一个VideoCapture对象`capture`,并传入参数0以表示打开默认摄像头。接着创建一个Window对象`window`,用于显示视频流。然后进入一个无限循环,在每次循环中通过`capture.Read(frame)`读取视频帧,并通过`Cv2.ImShow("Camera Preview", frame)`显示在窗口上。最后使用`Cv2.WaitKey(30)`判断是否按下ESC键,如果是则跳出循环,结束程序。 这样,就可以使用OpenCVSharp打开相机,并实时显示摄像头画面了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值