OpenCVMat图片复制

记录方便查询系列(一)

srcimage.copyTo(firstimage);
secondimage = srcimage.clone();
thirdimage = srcimage;
Mat fourthimage(srcimage);

Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。
前两个是深拷贝,不仅拷贝矩阵头,还拷贝矩阵信息
后面的两个 Mat 对象有自己的信息头,但共享同一个矩阵。这通过让矩阵指针指向同一地址而实现。

OpenCVOpenCV Mat)中,`annotator.result()`通常是某种图像标注工具(如dlib、OpenCV自己的注解工具等)提供的函数,用于获取标注的结果数据,这可能是矩形框、点或其他形状的数据结构。然而,直接从这些工具得到的结果转换成`cv::Mat`(OpenCV矩阵)并不是标准操作,因为标注工具产生的结果可能是一种特定的数据格式,比如列表或字典,而不是直接的图像数据。 假设`annotator.result()`返回的是包含边界框信息(例如矩形的坐标)的列表或字典,你可以按照以下步骤将其转换为`cv::Mat`: 1. **解析标注结果**: 比如,如果你得到的是一个包含`left`, `top`, `width`, `height`的元组列表,你可以构建一个表示每个框的`Rect`对象。 ```python bounding_boxes = [(x, y, w, h) for x, y, w, h in annotator.result()] rects = [cv2.Rect(left, top, width, height) for left, top, width, height in bounding_boxes] ``` 2. **创建空的掩码矩阵**: 然后你可以创建一个与输入图像同样尺寸的全零`cv::Mat`,这个矩阵将被用来记录哪些部分被标注了。 ```python mask_shape = (image.shape[0], image.shape[1], 1) if len(image.shape) == 2 else (image.shape[0], image.shape[1], image.shape[2]) mask = np.zeros(mask_shape, dtype=np.uint8) ``` 3. **填充掩码**: 最后,遍历`rects`列表,将每个框对应位置设为白色(非零值),表示该区域已被标注。 ```python for rect in rects: mask[rect.y:rect.y+rect.height, rect.x:rect.x+rect.width] = 255 ``` 4. **从掩码转换为cv::Mat**: 如果你需要的是OpenCV的`cv::Mat`格式,可以把`mask`复制出来: ```python open_cvmat = cv2.fromarray(mask) ``` 请注意,上述代码是一个简化的示例,实际处理可能会更复杂,取决于`annotator.result()`返回的具体数据结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值