OpenCV中如何用int型patch_size乘积初始化cv::Mat::ones及设置类型参数?
解决OpenCV中整数转cv::Size及cv::Mat::ones()参数问题
嘿,刚上手OpenCV遇到这种基础类型转换和参数问题太正常了,我来一步步给你讲清楚:
一、整数转cv::Size的正确方式
首先得明确:cv::Size是用来表示矩阵宽高的结构体,它的构造函数需要两个整数参数(分别对应width和height)。
你提到的“由patch_size * patch_size计算得到的整数”,我猜你是想创建一个边长为patch_size的正方形矩阵?这里分两种情况处理:
- 如果你的整数就是
patch_size(可能表述时多写了一次乘法),直接把它同时传给cv::Size的宽和高就行:int patch_size = 5; // 示例边长 cv::Size mat_size(patch_size, patch_size); - 如果这个整数确实是
patch_size * patch_size(也就是矩阵的面积),那你需要先计算出边长(前提是这个面积是完全平方数,否则会有精度误差),再构造cv::Size:int area = patch_size * patch_size; int side_length = static_cast<int>(sqrt(area)); // 强制转换为整数边长 cv::Size mat_size(side_length, side_length);
之后你就可以把这个mat_size直接传给cv::Mat::ones()的第一个参数了。
二、关于cv::Mat::ones()的第二个int参数
这个参数是用来指定矩阵元素的数据类型的,OpenCV提供了一系列预定义宏来表示不同类型,常用的有这些:
CV_8U:8位无符号整数(范围0-255),适合存储灰度图像类数据CV_32F:32位单精度浮点数,常用于浮点运算场景CV_64F:64位双精度浮点数,用于精度要求更高的浮点计算CV_32S:32位有符号整数,适合存储整数型业务数据
举个完整的示例,创建一个5×5、元素类型为32位浮点数的全1矩阵:
int patch_size = 5; cv::Size mat_size(patch_size, patch_size); cv::Mat ones_mat = cv::Mat::ones(mat_size, CV_32F);
如果不指定正确的类型,后续的矩阵运算很可能出现类型不匹配的错误,所以一定要根据你的实际需求选择合适的类型哦~
内容的提问来源于stack exchange,提问作者SEPS
相关产品推荐
相关产品推荐

