OpenCV使用cv::imshow在子线程中更新图片不刷新

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

编译执行如下代码:

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

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

修改后的代码如下:

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

这个等候时间,只要大于0即可,比如:

参考链接


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)

ubuntu 16.04执行letsencrypt的时候报告错误“ImportError: No module named datetime”

网站一直使用letsencrypt提供的HTTPS证书,这个证书的问题在于每隔三个月就必须更新一次,本次更新证书的时候,提示如下错误:

错误发生的原因在于letsencrypt自己构建了一个Python的虚拟环境来隔离,但是早期建立的虚拟环境中是缺少部分软件包的,而自身的BUG导致也没有重新更新虚拟环境,导致出现异常。

解决方法就是删除letsencrypt自己构建的Python的虚拟环境,然后继续执行脚本让他重建即可。

参考链接


Ubuntu 16.04.3/14.04.5系统上修改Docker镜像的存储路径

最近在Ubuntu 16.04.3/14.04.5系统上使用Docker结果由于默认的镜像存储路径在系统分区上,而系统分区又不足够大,导致整个系统都不能正常工作了。

因此我们需要把Docker的镜像存储目录移动到数据分区。

执行如下命令查询默认的存储路径

我们看到如下输出

比较简单的方法是通过软链接的方式来实现,具体命令如下:

参考链接


Ubuntu 14.04系统上安装部署OpenWhisk(本地CouchDB版本)

1.安装配置CouchDB

校验CouchDB是否工作正常

看到如下输出即可

2.编译配置OpenWhisk

下载OpenWhisk的源代码

配置OpenWhisk编译需要的环境

执行编译

3.发布并运行OpenWhisk服务

配置运行环境

安装必备软件

运行测试Demo

如过想查看刚刚通过vagrant部署完成的镜像系统里面的内容,则执行如下命令:

如果成功部署了OpenWhisk,那么可以在Docker机器中执行如下代码验证是否可以正常调用

外部的机器访问则执行如下命令来验证

4.遇到的问题

最大的问题是在编译发布的过程中系统分区被消耗干净,导致编译发布失败。
解决方法如下
1.参照Ubuntu 16.04系统上修改Docker镜像的存储路径介绍的方法调整Docker镜像的存储路径到合适的分区
2.如果使用sudo的方式执行,那么可能会在/root目录下生成虚拟机的镜像文件,同样导致系统分区被消耗,解决方法也是通过软链接的方式把/root目录链接到合适的分区目录

如过执行中遇到如下错误,则增加-i参数即可

参考链接


Ubuntu分析磁盘使用情况

Ubuntu系统上,由于某些原因导致磁盘空间不足,需要分析一下磁盘使用情况,看看是哪个目录或者应用占据了磁盘。

Ubuntu系统默认自带的磁盘分析工具是baobab,如果没有自动安装,可以执行如下命令来手动安装:

这个工具的问题在于,如果直接点击启动,会由于权限问题,无法完整的分析磁盘。

因此,需要在命令行下面用root权限去执行:

参考链接


获得ubuntu的版本与Codename

有时我们需要获取ubuntu系统的版本信息,尤其是Codename部分,某些包安装的时候会根据Codename来区分。

打印ubuntu系统的版本信息的命令如下:

命令输出的结果如下:

提取Codename部分的字段的命令如下:

Ubuntu 16.04上查看dd命令的进度信息

Ubuntu 16.04系统上执行如下命令

的时候,可能会非常耗时,这个时候,如果让dd命令输出执行进度信息,会非常有用。

重新打开一个Shell,然后执行如下命令即可每秒输出一次进度信息

参考链接


Ubuntu 16.04系统上Clang与GCC之间切换

在编译C++代码的时候,我们有时需要比较一下不同编译器之间优化性能的差异,因此需要在ClangGCC之间进行切换,用来比较最后的实际效果。

Ubuntu 16.04系统上使用如下命令进行切换

参考链接


Switching between GCC and Clang/LLVM using CMake