周记 2020.02.17-02.23

1.边缘检测

突然注意到一个事情,用Laplacian和Sobel算子,过渡/渐变性的背景不会被误认为是边缘,而用Schaar和Canny,尤其是前者,就有这种问题。

嗯,虽然是和参数有关的(更何况Schaar调一下就可以变成Sobel),但还是值得注意一下。

2.utility

3.自己写ISP

我自己写,还是用C++吧

4.回到vs

之前一直没有用过lut调色板,只是用Expr工具。通过循环给数组赋值,做一个lut,然后用这个lut调节亮度。

说起来,Python当中的tryappend()我都没用过。

5.并行与MPI与其他

回想起一年前上的并行计算课,有些东西真的是在不经意间积累,然后又不经意的出现在你身边。

OpenCL 2.0 异构计算

消息传递接口(MPI)库经历了时间的磨砺,在当今环境下依旧是很受欢迎的消息传递中间件

粒度,不同模型:

  • 单指令多数据(SIMD)
  • 单程序多数据(SPMD)

OpenCL的内核类似于SPMD模型

说起来fmtc有指令集优化,但没用OpenCL。(话说我见过的用OpenCL的滤镜也只有Canny和KNMeans了)

6.Mat与IPlImage

IPlIMage是OpenCV 1中概念,Mat则是OpenCV 2与OpenCV 3中的概念。Mat“更加C++”,引入了类的概念,同时不再需要像IPlIMage那执着于内存管理。

现在读取raw格式还是用的IPlIMage,总感觉这样不太好,还是用Mat更好吧。我得再整理一下整个处理流程了…要不直接把14bit补成16bit?

后续就是用cvConvertScale()函数把14bit扩张/收缩到了16bit/8bit。

7.C++基础

读到了《现代C++教程:高速上手 C++ 11/14/17/20》这本书,感慨万千啊,过多话不展开了,记录一下我读到的内容。

auto关键字

auto不能用于函数传参,也不能用于数组推导。

区间for迭代

让C++像Python那样简洁地写for循环。

typename与class

在写模版时,typenameclass大部分时候没有区别,但有嵌套依赖类型的变量时,需要使用typename

实例化与外部模版

C++11引入了外部模版,可以控制编译器是否对模版进行实例化。通过template classextern template class关键字实现。

默认模版参数

C++11可指定默认模版参数。

1
template <typename T = int, typename U = int>

变长参数模版

可以对类模板和函数模版使用变长参数(真的~好神奇的感觉~~)。

面向对象部分的新特性

这部分有点过于强大…我还得好好理解一下…我之前一直不知道overridefinal这两个关键字是C++11引入的新特性。

8.去马赛克

突发奇想,从某个角度想,raw格式照片的Bayer数据结构,和YUV420的色度半采样有点像。

一些问题

难得在运行出错后,在cmd里有了报错信息,如下。

1
OpenCV(3.4.9) Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\build\3_4_winpack-build-win64-vc15\opencv\modules\highgui\src\window.cpp, line382

9.牛客网刷题

突然想到今天(2.20)明明也认真的,但Github上却没有commit。想了一下,上午在牛客网做题。嗯,这样也挺好的。