CPU负载高后读取摄像头图像缺失

jimmjimm 2022-10-28 17:05:44

在一般负载下能够正常读取图像,在导入算法使CPU增大负载后(使用prime95拷机也可以),开始出现丢图问题

 

这是我读取图像的线程代码内容

while (1)
{
	if (!cap.isOpened())
		return CAM_ERROR_OPEN;
	i = 0;
	cap.grab();
	res = cap.retrieve(frame, 0);
	if (res==0) {
		frame_count = frame_count;
		printf("no image\n");
	}
	else {
			if (frame_count > c_depth)
			{
				frame_count = 0;
			}
			printf("%d frame get\n", frame_count);

			///////////////memory copy and split part///////////
			memcpy(img_T, frame.data, c_width * c_height * 2);
			for (size_t i = 0; i < c_total; i = i + 8)
			{
				img_L[(i / 2) + 0] = img_T[i + 3];

				img_L[(i / 2) + 1] = img_T[i + 2];

				img_L[(i / 2) + 2] = img_T[i + 1];

				img_L[(i / 2) + 3] = img_T[i + 0];

				img_R[(i / 2) + 0] = img_T[i + 7];

				img_R[(i / 2) + 1] = img_T[i + 6];

				img_R[(i / 2) + 2] = img_T[i + 5];

				img_R[(i / 2) + 3] = img_T[i + 4];
			}
			mtx.lock();
			memcpy(img_L_T + (frame_count * c_width * c_height), img_L, c_width * c_height);
			memcpy(img_R_T + (frame_count * c_width * c_height), img_R, c_width * c_height);
			frame_count++;
			mtx.unlock();
	}

}

 

...全文
82 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2022-11-23
  • 打赏
  • 举报
回复

设置较低的分辨率
比如固定跳过一帧获取一帧

bluesen 2022-10-30
  • 打赏
  • 举报
回复

所以你的问题是降低cpu占用。
另外你的代码怎么没有调用waitkey(...) ?

jimmjimm 2022-10-30
  • 举报
回复
@bluesen 这个线程不需要退出,在整个程序的生命周期一直存在,所以应该不需要使用waitkey吧??多线程和opencv这块都是刚接触不是太懂
jimmjimm 2022-10-30
  • 举报
回复 1
@bluesen 另外这个cpu占用是另外一组人做的图像计算算法导致的,没有太好的解决方法
bluesen 2022-10-31
  • 举报
回复
@jimmjimm 必须要
2条回复
相关推荐
发帖
OpenCV

3711

社区成员

OpenCV相关技术交流专区
语音识别计算机视觉人工智能 技术论坛(原bbs)
社区管理员
  • OpenCV
加入社区
帖子事件
创建了帖子
2022-10-28 17:05
社区公告
暂无公告