CV-openCV学习笔记一

openCV官方文档

导论

命名空间

using namespace cv;

自动内存管理

// 创建一个8Mb矩阵
Mat A(1000, 1000, CV_64F);
// 为同一个矩阵创建另外一个header
// 这是一个即时操作,无论矩阵大小
Mat B = A;
// 为A的第三行创建另外一个header,同理没有数据复制产生
Mat C = B.row(3);
// 现在创建A的拷贝
Mat D = B.clone();
// .将B的第五行复制到C,也即是,将A的第五行复制到A的第三行
B.row(5).copyTo(C);
// 让A和D共享同一矩阵,而原来的A仍然被B和C引用
A = D;
// 现在释放B(不指向任何内存空间),但是原来的A仍然被C引用,尽管C仅仅引用一行
B.release();
// 最后,创建了一个C的拷贝,且C指向了这个拷贝。这时,原来的A会被释放,因为它不再被任何人引用。
C = C.clone();

指针:

T* ptr = new T(...);

使用Ptr<T> ptr(new T(...));Ptr<T> ptr = makePtr<T>(...); 代替

自动为输出数据分配空间

饱和算法

图像类型的强制转换:
8bit图像: I(x,y)=min(max(round(r),0),255) ,其它类推
代码:I.at<uchar>(y, x) = saturate_cast<uchar>(r);

Mat泛型

Mat mtx(3, 3, CV_32F); // 3x3 浮点 1通道 矩阵
Mat cmtx(10, 1, CV_64FC2); // 10x1 2通道 浮点 矩阵
                           // 10个复向量
Mat img(Size(1920, 1080), CV_8UC3); // 1080x1920(只有Size有这种效果)3通道 8位无符号整数
Mat grayscale(image.size(), CV_MAKETYPE(image.depth(), 1)); // image的大小和深度,1通道

有关宏定义CV_XXX:
CV_8U,CV_8S:8位无符号数uchar;8位符号数schar
CV_16U,CV_16S:16位无符号数ushort;16位符号数short
CV_32S:32位符号数int
CV_32F,CV_64F:32位浮点数float;64位浮点数double
在上面宏定义后面
C+1~4:代表有几个通道,大于4或者编译时不知道通道数的情况下使用C(n),或者CV_MAKETYPE(CV_8U, n)
CV_32FC1 == CV_32F, CV_32FC2 == CV_32FC(2) == CV_MAKETYPE(CV_32F, 2)
CV_MAKETYPE(depth, n) == ((depth&7) + ((n-1)<<3)

输入输出数组

如Mat, std::vector<>, Matx<>, Vec<> 或 Scalar这类,你可以照常使用,如果函数需要额外的数组而你又不想传参的话,使用cv::noArray()

错误处理

try
{
    ... // call OpenCV
}
catch( cv::Exception& e )
{
    const char* err_msg = e.what();
    std::cout << "exception caught: " << err_msg << std::endl;
}

有以下抛出错误的方法:
CV_Error(errcode, description)CV_Error_(errcode, printf-spec, (printf-args))
CV_Assert(condition)CV_DbgAssert(condition)

多线程与可重入性

Image Watch插件

下载:http://go.microsoft.com/fwlink/?LinkId=285460
视图->其他视图->image watch->Debug调试
Link Views:对同一大小的图固定查看区域

载入显示图像

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值