- 博客(22)
- 收藏
- 关注
原创 opencv-图像形状变换(二)
通过上述的平移,缩放,旋转的组合变换即实现了仿射变换,上述多个变换的变换矩阵相乘即能得到组合变换的变换矩阵。同时该变换矩阵中涉及到六个未知数(2*3的矩阵),通过变换前后对应三组坐标,也可以求出变换矩阵,opencv提供了函数getAffineTransform()来计算变化矩阵。将(x,y),以坐标原点为中心,顺时针方向旋转α得到(x1,y1), 有如下关系x1 = xcosα-ysinα, y1 =xsinα+ycosα;1> 矩阵相乘:将平移,旋转和缩放的变换矩阵相乘,最后即为仿射变换矩阵。
2023-03-09 14:00:50
216
原创 opencv-图像形状变换(一)
仿射变换的本质:即一个矩阵A和向量B共同组成的转变矩阵,和原图像坐标相乘来得到新图像的坐标,从而实现图像移动,旋转等。如下矩阵A和向量B组成的转变矩阵M,用来对原图像的坐标(x,y)进行转变,得到新的坐标向量T。仿射变换可以通过一系列的原子变换的复合来实现,包括平移,缩放,翻转,旋转和剪切)了解了仿射变换的概念,平移变换只是采用了一个如下的转变矩阵(transformation matrix): 从(x,y)平移到(x+tx, y+ty)仿射变换(矩阵计算):变换前坐标(x,y)4.2.1 平移变换。
2023-03-09 13:48:50
275
原创 C++指针(面试高频考点2)
NULL在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议用nullptr替代NULL吧,而NULL就当做0使用。3)指针指向的变量已超越变量的作用域(变量的内存空间已被系统回收),让指针指向了函数的局部变量,或者把函数的局部变量的地址作为返回值赋给了指针。所以,内存被释放后,也应该把指针指向空。
2023-03-07 17:23:45
544
原创 Python--os.path.join()函数
如果存在以“./”与“/”开始的参数,以"/"为主,从最后一个以”/”开头的参数开始拼接,之前的参数全部丢弃。如果存在以‘’/‘’开始的参数,从最后一个以‘’/‘’开头的参数开始拼接,之前的参数全部丢弃。os.path.join()函数的作用,其实就是拼接,在写一些常见的脚本的时候,是需要用到的。只存在以‘’./‘’开始的参数,会从”./”开头的参数的上一个参数开始拼接。
2023-03-04 14:04:05
186
原创 pycharm终端常用指令
Ctrl+& 恢复 ctrl+h 或者 ctrl+d 或者 ctrl+w 删除的内容。Ctrl+y 粘贴由 Ctrl+u , Ctrl+d , Ctrl+w 删除的单词。Shift+Ctrl+PgUp/PgDn 左移右移标签页。Alt+T 打开 “终端” 菜单(terminal)Alt+S 打开 “搜索” 菜单(search)Alt+F 打开 “文件” 菜单(file)Alt+H 打开 “帮助” 菜单(help)Shift+Ctrl+N 打开新的终端窗口。Shift+Ctrl+T 打开新的标签页。
2023-03-02 11:25:54
4605
原创 矩阵中的局部最大值
示例 1:来源:力扣(LeetCode)著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。1、len() 函数返回对象中项目的数量。当对象是字符串时,len() 函数返回字符串中的字符数。
2023-03-01 14:58:47
207
原创 C++指针(面试高频考点1)
在C++中,指针是复合数据类型,复合数据类型是指基于其它类型而定义的数据类型,在程序中,int是整型类型,int*是整型指针类型,int*可以用于声明变量,可以用于sizeof运算符,可以用于数据类型的强制转换,总的来说,把int*当成一种数据类型就是了。如果把函数的形参声明为指针,调用的时候把实参的地址传进去,形参中存放的是实参的地址,在函数中通过解引用的方法直接操作内存中的数据,可以修改实数的值,这种方法被通俗的称为。指针存放变量的地址,因此,指针名表示的是地址(就像变量名可以表示变量的值一样)
2023-02-28 08:43:37
263
原创 C++ sizeof运算符
字符串(string)不是C++的基本数据类型,用sizeof求它占用内存的大小没有意义。在32位和64位操作系统中,同一种数据类型占用的内存空间可能不一样。用于变量:sizeof(变量名) 或sizeof 变量名。sizeof运算符用于求数据类型或变量占用的内存空间。用于数据类型:sizeof(数据类型)
2023-02-27 15:36:18
240
原创 C++递归函数
一个函数可以调用另一个函数,作为特例,如果函数调用了自己,就像故事中提到了同样的故事一样,我们把函数在运行时调用自己的情况叫做递归。递归函数中一定要有递归终止的条件,否则是死递归。
2023-02-27 14:33:42
309
原创 C++函数参数的传递
调用者程序中书写的在函数名括号中的参数,可以是常量、变量和表达式。在函数定义的代码中,修改形参的值,会不会影响实参。调用函数的时候,调用者把数值赋给了函数的参数。
2023-02-27 09:51:06
97
原创 C++变量的作用域
局部变量和全局变量的名称可以相同,在某函数或语句块内部,如果局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量,如果想使用全局变量,可以在变量名前加两个冒号(::)。局部变量不会自动初始化,其值是不确定的,程序中应该有初始化局部变量的代码,否则编译可能会报错(不同的编译器不一样)。变量分全局变量和局部变量两种,全局变量在整个程序中都可以访问,局部变量只能在函数或语句块的内部才能访问。在函数或语句块内部的语句使用,在函数或语句块外部是不可用的。3)在函数和语句块内部定义的是局部变量。
2023-02-27 09:49:54
814
原创 C++中的函数部分学习
函数的声明和定义可以书写在一起,也可以分开,如果书写在一起,一般放在main函数的上面,如果分开,一般在main函数的上面声明,在main函数的下面定义。函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。如果函数的声明和定义分开书写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。不管在什么地方,都不能调用main函数,但是,在普通函数中,可以调用其它的普通函数。声明函数的代码必须放在调用之前,定义函数的代码可以放在调用之后。
2023-02-25 15:02:53
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人