工作日志

专门开一篇文章,当做总结日志吧。
9\9:
首先,复习下break和continue 。
break是跳出包含它的那个循环,如果是双重循环且BREAK是在内循环中的,就只能跳出内循环,在外循环中就结束这个双重循环。
continue是结束本次循环执行下一次循环。
可以用如下方法,多判断一次bool型的条件语句,退出双层循环。

if (...)
{
bMatch = false;
break;
}
}
if (!bMatch)
{
break;
}

其次是,在做图像膨胀操作时,当mask 为m*n任意形状时,构造m个run,存储每一行的形状,把中心座标设置为(0,0),遍历图像的空白像素进行膨胀操作。这些空白像素是指,存在run的行以及这些行的上下(m-1)>>1 这些行。
这种办法可以允许灵活的掩膜形状,并且由于并非遍历图片的所有空白像素,所以速度较快。

9\10
再重复一遍,取mat图像的像素点不要用萌萌傻傻的mat image;
image[row][col] = 255;
要么指针要么at~~~~

image.at<uchar>(row,col) = 255;//单通道
image.at<cv::Vec3b>(row,col) [0] = 255;//三通道
image.at<cv::Vec3b>(row,col) [1] = 255;
image.at<cv::Vec3b>(row,col) [2] = 255;
uchar* data = image.ptr<uchar>(row);
data[col] = 255;

还有一个萌萌分不清的东西:[],().
[]是左值运算符,装下标,起始为0;
()分好几类,一个是左值,功能是函数调用,如name(expr_list);二是还是左值,功能是类型构造,如type(expr_list);最后是一个是右值,功能是类型转换,如(type)expr .
9/14
错误程序:

CRun tempRun = { 0 };
CRegion tempRegion;
    for (int i = 0; i < length; i++)
    {
        for (int j = Row1[i]; j <= Row2[i]; j++)
        {

            tempRun.start = Column1[i];
            tempRun.end = Column2[i];
            tempRun.row = j;
            tempRegion.push_back(tempRun);
        }
        Region.push_back(tempRegion);
    }

每个循环做完后,没有及时将tempRun,tempRegion 清零,导致push_back vetcor 的东西不断累加。
正确代码如下:

    for (int i = 0; i < length; i++)
    {
        CRegion tempRegion;
        for (int j = Row1[i]; j <= Row2[i]; j++)
        {
            CRun tempRun = { 0 };
            tempRun.start = Column1[i];
            tempRun.end = Column2[i];
            tempRun.row = j;
            tempRegion.push_back(tempRun);
        }
        Region.push_back(tempRegion);
    }

10/19
一直觉得很难没去细致了解的离散图像傅里叶变化其实,说白了,就是邻域像素加权相加求均值。也就是说,高斯滤波和中值滤波的差异就只是在,加权吗?–是的

10/30
指针的指针,链接中的文章讲的不错。
http://www.cnblogs.com/dzry/archive/2011/05/12/2044835.html
总结下就是,指针也是一个变量,也有它的地址和内容,内容就是它指向的变量的地址。所以A指向整型变量C,指向指针A的指针B也是一样的,B也有自己的地址,B的内容就是A的地址。如果C是一个数组的话,那么,指向数组的指针就是存数组首元素的地址。
另外,指向字符的指针的输出需要mark一下:

char c[]= "hello";
char *p = c;
cout<<p<<endl;
cout<<(void*)p<<endl;
cout<<*p<<endl;

结果是
hello
0032fc21
h

p中存放的是地址,只是当cout时,如果指针是字符型指针,那么会输出p中地址指向的内存中的内容(这里是h)直到遇到’\0’才结束。所以直接输出p时会输出hello,而将p强制转换为void *时输出的是地址
11/1
only a small tip
C语言用多行宏定义的时候,需要在每一行后面加行反斜杠“\”
(another tip 给和我一样傻傻分不清正斜杠和反斜杠的孩纸:
“/”正斜杠,直线的顺时针旋转,“\”反斜杠,直线的逆时针旋转)

#define MEASURE_ID   measure_handle MeasureHandle;\
                    measure_id_global_count++;\
         Measure.handle_id = measure_id_global_count;

11/2
inline函数,“内联”或“内嵌”。意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间)。这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大。
摘自http://blog.csdn.net/forarrow/article/details/6394931

11/3
为什么可以用非常量做维度???

int size = 4 * length1 * length2;
MeasureHandle.nearestNeighborPointSet = new nearestNeighborPoint[size]; 

12/12
取整,(int)f
四舍五入,(int) (f+0.5)
向上取整 ceil(i)

12/22
对方已经建了一个仓库,在我的机子上要下载内容的方法:
在一个非仓库目录下,右键-SVN checkout ,URL of repository 是对方设置的网络地址和文件目录,例如:https://192.168.1.9/svn/HalconRepository
checkout directory 是我自己放这个仓库的目录,也就是下载的位置,例如:E:\HalconRepository
其他默认,ok即可。
每次重新下载完了之后,我的vs总是出现:
错误 4 error LNK1104: 无法打开文件“opencv_world300d.lib” E:\HalconRepository\HalconFunction\LINK HalconFunction
解决办法:右键工程-属性-配置管理器-调整成debug模式下,x64位平台.

12/23
图像膨胀腐蚀的边缘像素处理:
在图像的周围补齐需要的像素,像素值为0;
那么假设使用的是3*3的模板,那么图像第一个像素的就有上行和下列都是0像素,在腐蚀操作是,这个像素将被腐蚀。

2016/3/18
一个多月没有用VS了,之前整理文件的时候,把SVN建的仓库的文件夹挪了一下地儿,今天打开VS就发现那个文件夹里面的工程出现了一堆红线-原因是找不到opencv2/opencv.hpp头文件。在同事协助下,在不修改工程属性的情况下,将opencv整个原始文件放到了仓库文件的同级目录下,解决了这个问题。

2016/11/28
好记性不如敲笔记,来把计算机视觉深度学习数据处理流程记录一下。

  1. 首先是训练集的处理。我们要教计算机先懂得我们感兴趣的区域在哪,然后在这个区域内识别目标。通过抠图将首先原图的ROI位置告诉计算机,然后再从ROIImage里面把目标object位置以及groundtruth告诉计算机。如同你反复教一个完全不懂事的孩子,教的次数足够多了,并且教的正确了,他就会学会分辨,从而达到识别的目的。每次提供的Object尽量避免周围的干扰,所以抠图范围尽量小,目标尽量摆正。为了达到这个目的,抠图之前可能就要做一些图片的预处理了。第一步骤完成后,喂给计算机的就是原图以及原图的ROI座标,ROIImage以及其内部Object的座标和对应的groundtruth。当然,如同老师准备教案用来教育小孩一样,教案错了,学生的认知就会错,所以,要喂给计算机的这两组数据要做一次初步的检查,确保label没有贴错,位置没有给错。
  2. 参考这篇文章, https://github.com/deboc/py-faster-rcnn/blob/master/help/Readme.md
    我们需要为网络训练准备以下材料:
    这里写图片描述
    当然,这一步,对于获取ROI 和ROI内获取object两步操作是分开的,各自需要自己的一套文件资料。假设代码名称是getannotation和getannotation_digit。生成的三个文件夹之一是Annotations,里面是.xml文件,python的包xml.etree.ElementTree可以用来辅助生成树文件和元素。

  3. 到现在,数据就准备好了。接下来就可以修改网络模型使其适应现在的识别需求。前文的链接讲述Train Py-Faster-RCNN on Another Dataset,可以参照修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章