OpenCV升级到3.0之后cv::imshow子线程中更新图片不显示

Ubuntu 16.04上测试 OpenCV 3.2,遇到一个在子线程中更新图像,而界面不刷新的问题。

编译执行如下代码:

可以看到,上面的代码执行之后,界面并没有出现,即使出现也没有刷新。

这个问题是由于界面更新必须在主线程中执行,需要用户手工通知主线程。

修改后的代码如下:

也就是每次更新图片后手工调用代码

参考链接


c++ opencv image not display inside the boost thread

文件'/var/lib/update-notifier/package-data-downloads/partial/adobe-flashplugin_20170912.1.orig.tar.gz'无法被用户'_apt'访问,无法降低权限以进行下载。 - pkgAcquire::Run (13: 权限不够)

最近在更新 Ubuntu 16.04系统的时候,发现总是在安装 Adobe Flash更新的时候失败,提示如下信息:

如果系统语言是英文的,可能看到下面的信息:

解决方法如下:

这样,就可以正常安装更新了。

参考链接


Can't drop privileges for downloading as file '/var/lib/update-notifier/package-data-downloads/partial/andale32.exe' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

在Makefile中检查gcc版本

问题描述

我想使用一些在旧的 GCC版本中不可用的 GCC警告开关(例如 -Wtype-limits)。

有没有一个简单的方法来检查 GCC版本?

最佳解决方案

我不会说容易,但是可以使用 GNU makeSHELL函数来执行 gcc --version命令,然后使用 ifeq条件表达式来检查版本号,并适当地设置 CFLAGS变量。

以下是一个简单的 MakeFile示例:

注意:不存在 ifgt语法。但是可以使用 expr命令进行比较。

例子如下:

次佳解决方案

要将完整的 3部分 GCC版本(不仅第一位数字)转换成数字格式,适合比较(例如 40701)使用

其中解决了任何版本部分中双数字版本号的可能性,以及 gcc -dumpversion输出内容缺少 3个部分的可能性(在一些较早的 GCC版本中存在这种情况)。

所以要测试 MakeFile中的版本,使用(注意 $$里面的最后一个 sed命令)

第三种解决方案

我刚刚遇到这个问题,我需要测试 GCC的前两位数字,想要一个比上面 sed过滤字符串更复杂的操作。我使用 bc进行比较,因为它支持浮点数( expr将非整数( non-integers)都视为字符串):

如果在 GCC 4.9之后发布了 GCC 4.10,那么用 sed处理是必要的:

参考链接


在Makefile中检查gcc版本?

Ubuntu 16.04.3系统上OpenPTrack V1版本安装配置(Kinect V2)

对于 Ubuntu 14.04.5系统上的安装操作,请参考Ubuntu 14.04.5系统上OpenPTrack V1版本安装配置(Kinect V2)

下面是我自己 fork出来修改后的代码在 Ubuntu 16.04.3系统上的安装操作

1.从GitHub上获取项目代码

2.安装ROS

3.安装 OpenPTrack

4.链接 OpenPTrack目录

5. Kinect V2驱动程序安装

6.重新编译代码

执行如下命令:

检查当前用户目录下的 .bashrc文件,然后注释掉如下内容:

上面语句如不注释,会导致程序启动时候的崩溃。

新建一个 Shell,执行如下命令

7.测试系统

可能需要重新插拔一下 KinectUSB数据线,然后执行如下命令

执行之后,等待十几秒,然后 Ctrl+C中断执行。
执行完成后,执行

之后,会弹出三个界面出来。

参考链接


OpenPTrack Installation Guide

Kinect V2 深度图与彩色图融合(Ubuntu 14.04)

参考Kinect V2在Ubuntu 14.04系统上的驱动配置与安装在一个全新安装的 Ubuntu 14.04系统中配置完成相关的驱动及其依赖。

Kinect V2深度图与彩色图融合的方式,简单粗暴,由于深度图像是 512*424大小,因此,直接把彩色图像缩放成对应的 512*424,然后像素点一一对应。至于原始大小的彩色图像,那么就是一片像素对应同一个深度即可。

注意,这个方式只适合 Kinect V2,可以理解成 Kinect V2的设计就是这样的,两个设备出厂的时候就校准为这样的输出。

具体的转换代码参考registration.cpp,Registration.cpp,建议直接调用驱动层提供的功能来实现,这样的话,一系列的参数设置可以同步,否则上层每次修改了分辨率等参数的时候,要自己手工修改这些数据。

Python深度图与彩色图融合的例子如下:

 

参考连接


Debian:如何从Jessie升级为Stretch(Debian 8.0 升级到Debian 9.0)

Debian 9(代号为 Stretch)已经正式发布,可以开始尝鲜 Debian 9了。

1. 更新 Debian Jessie到最新版

2. 将软件源改为 Stretch安装源

3. 升级系统版本

4. 重启

参考链接


Debian:如何从 Jessie 升级为 Stretch

Kinect V2在Ubuntu 14.04系统上的驱动配置与安装

以下的操作是在一个全新安装的 Ubuntu 14.04系统上进行的,目前已知在安装了 ROS的系统上并且已经安装过 ROS版本的 Kinect V2驱动的,可能需要先移除以前安装的面向 ROS编译的 Kinect V2驱动才行。

首先是安装配置驱动程序以及运行依赖库

参照libfreenect2 install linux的说明安装驱动

安装 Python扩展

Python例子如下:

注意,如果编译的时候出现如下错误:

则该现象出现的原因是首先参照

进行了编译,并且编译的时候是没有开启 CUDA支持的。

然后执行了

因此在 ~/libfreenect2/include/libfreenect2/下面已经生成了 config.hexport.h这两个文件。
然后又按照我们这里的

重新编译,并且这次开启了 CUDA支持,导致 GCC在编译的时候使用了我们在 ~/libfreenect2/build/libfreenect2/下面生成的 config.hexport.h这两个文件,而 NVCC却使用了 ~/libfreenect2/include/libfreenect2/下面的 config.hexport.h进行编译,导致上面的错误发生。

因此删除全部的临时文件,然后再次重新编译即可。

参考连接


Ubuntu 14.04.5系统上OpenPTrack V1版本双Kinect V2简单校准

参照Ubuntu 14.04.5系统上OpenPTrack V1版本安装配置(Kinect V2)配置安装完成后,是单台机器的方式。

如果场地比较大,则需要部署多个 Kinect V2。由于每台 Kinect V2看到同一个人的视角不同,因此需要校准,才能进行合并。

下面,我们用两台 PC+两个 Kinect V2(每台机器上连接一个 Kinect V2)来演示一下如何校准的操作。

继续阅读Ubuntu 14.04.5系统上OpenPTrack V1版本双Kinect V2简单校准

OpenMdeiaValut 3.0.86上编译Linux Kernel 4.13-rc6/Linux Kernel 4.13-rc7/Linux Kernel 4.13 Mainline

也可以使用下面的方式正常编译 Linux Kernel 4.13-rc7/Linux Kernel 4.13 Mainline

建议使用 VirtualBox上建立虚拟机,保证磁盘空间不小于 32GB,给 root用户设置密码,远程通过 shell登录到虚拟机。

查询虚拟机的 IP地址的时候,使用

命令查询。虚拟机网卡设置的时候,设置为桥接模式,默认的 NAT模式无法通过 SSH登录。

然后执行如下命令:

完成后,在当前用户目录下生成 linux-image-4.13.0-rc6_4.13.0-rc6-10.00.Custom_amd64.deb安装包,执行如下命令安装:

参考链接


Debian下的内核编译

Ubuntu 14.04系统上Python使用"subprocess.Popen"执行"source"命令报告错误“/bin/sh: source: not found”

使用如下的例子中的代码

运行的时候报告错误

这个错误发生的原因是 subprocess.Popen执行 Shell命令的时候默认调用 /bin/sh,而 source命令 /bin/bash才支持的,因此导致错误发生,修改后的脚本如下:

注意添加的 executable="/bin/bash",指明了执行脚本的执行程序是 /bin/bash

参考链接


Calling the “source” command from subprocess.Popen