QGraphicsItem如何使用信号与槽 2018-05-19

QGraphicsItem如何使用信号/槽

对于 QGraphicsItem 来说,信号/槽和属性机制不是它的一部分,因为它不继承自 QObject。这是一个出于性能考虑的设计决策,允许比较大的场景以及快速的交互。

特殊情况下,如果真的需要使用信号/槽,可以使用 QObject 的信号/槽和属性机制来扩展 QGraphicsItem。


继承自 QObject 和 QGraphicsItem

OpenCV之BackgroundSubtractorMOG2动态目标检测 2018-05-12

OpenCV之BackgroundSubtractorMOG2动态目标检测


// OpenCV3 与 OpenCV2 一些区别 ...
Ptr<BackgroundSubtractor> bg_model = createBackgroundSubtractorMOG2();
bg_model->apply(img, fgmask);

// ------------------------------------ //
//  params.minThreshold = 20;//二值化的起始阈值
//  params.maxThreshold = 180;//二值化的终止阈值
//  params.thresholdStep = 10;//二值化的阈值步长
//  params.minConvexity = 0.5f;//斑点的最小凸度 默认0.95f
//  params.minInertiaRatio = 0.03f;//斑点的最小惯性率 默认0.1f
//  params.minArea = 120;//斑点的最小面积
//  params.maxArea = 5000;//斑点的最大面积
//  params.blobColor = 255;//检测白色
//  重复的最小次数,只有属于灰度图像斑点的那些二值图像斑点数量大于该值时,该灰度图像斑点才被认为是特征点
//  params.minRepeatability = 2;
//  最小的斑点距离,不同二值图像的斑点间距离小于该值时,被认为是同一个位置的斑点,否则是不同位置上的斑点
//  params.minDistBetweenBlobs = 10;
// ------------------------------------ //

Golang中的Race检测 2018-04-23

Golang中的Race检测

由于golang中的go是非常方便的,加上函数又非常容易隐藏go。 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。

所以在本质上说,goroutine的使用增加了函数的危险系数论go语言中goroutine的使用。比如一个全局变量,如果没有加上锁,我们写一个比较庞大的项目下来,就根本不知道这个变量是不是会引起多个goroutine竞争。

Rect主要做的就是检测线程间对某一个对象产生了竞争使用

// 未加锁版
package main

Golang之获取Struct的Tag 2018-03-05

获取Struce的Tag

package main

import (
    "fmt"
    "reflect"
)

type Foo struct {
    FirstName string `tag_name:"tag 1"`
    LastName  string `tag_name:"tag 2"`
    Age       int    `tag_name:"tag 3"`
}

Golang之一个有趣的闭包问题 2018-03-05

Golang之一个有趣的闭包问题

// 在论坛上看到一个有趣的闭包例子, 下面这两个例子输出结果截然不同 ... 
// 未达到目的
package main

import (  
    "fmt"
    "time"
)

type field struct {  
    name string
}

Go之runtime.Caller与runtime.FuncForPC使用 2018-03-02

runtime.Caller与runtime.FuncForPC

func Caller(skip int) (pc uintptr, file string, line int, ok bool)
// skip如果是0,返回当前调用Caller函数的函数名、文件、程序指针PC,1是上一层函数,以此类推
package main

import (
    "log"
    "runtime"
)

func main() {
    test()
}

OpenCV之-两幅相同与不同尺寸图像融合 2018-02-23

两幅相同与不同尺寸图像融合

#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/imgproc/imgproc.hpp>   
#include <iostream>   
using namespace cv;  
using namespace std;  

int main()  
{  
    //【0】定义相关变量   
    Mat ac, ahand;  
    //【1】读取原始图像并检查图像是否读取成功    
    ac = imread("D:\\OutPutResult\\ImageTest\\ac.jpg");  
    ahand = imread("D:\\OutPutResult\\ImageTest\\ahand.jpg");  
    if (ahand.empty() && ac.empty())        //检验两幅图像是否同时存在  
    {  
    cout << "读取图像有误,请重新输入正确路径!\n";  
    return -1;  
    }  
    //【3】显示原始图像  
    namedWindow("图像1ac");   //创建窗口  
    imshow("图像1ac", ac);    //显示窗口  
    namedWindow("图像2ahand");  
    imshow("图像2ahand", ahand);  
    //【4】调整ahand的大小与ac的大小一致,融合函数addWeighted()要求输入的两个图形尺寸必须相同    
    resize(ahand, ahand, Size(ac.cols, ac.rows));  
    //【5】利用addWeighted()函数对两幅图像进行融合  
    addWeighted(ac, 0.6, ahand, 0.4, 0., ac); //最后融合效果显示在ac图像上  
    /* 
    若不想毁坏原始ac图像,也可建立一个与ac图像类型尺寸一样的新图像,将融合后的图像保存到上面。 
    建立方法: 
    Mat newImage(ac.size(), ac.type()); //newImage与ac类型尺寸相同 
    */  
    namedWindow("图像1与图像2融合效果图");  
    imshow("图像1与图像2融合效果图", ac);  
    //【6】保持等待状态   
    waitKey();  
    return 0;  
}  

RESTful API 2017-12-29

RESTful API 简单了解

首先为什么要用RESTful结构呢?

早先页是前端后端融在一起的,比如之前的PHP,JSP等。
在之前的桌面时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。
另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。

通过Screen进行远程会话管理 2017-11-10

Screen是Linux下的一款远程会话管理工具

通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

为什么关掉窗口/断开连接会使得正在运行的程序死掉, 挂断信号(SIGHUP)默认的动作是终止程序

Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。

// 创建一个新的窗口:
[root@nljb ~]# screen
[root@nljb ~]# screen vi nljb.c

Golang之v1.9中线程安全的sync.Map 2017-10-18

Golang 1.9 sync.Map 使用

  • Store
  • LoadOrStore
  • Load
  • Delete
  • Range
// 说明: 存储一个设置的键值。
Store(key, value interface{})

// 说明: 返回键的现有值(如果存在),否则存储并返回给定的值,如果是读取则返回true,如果是存储返回false。
LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)