isContinuous() 判定 矩阵 row 是否是连续存储 | 笔记

举报
墨理学AI 发表于 2022/01/10 22:51:03 2022/01/10
【摘要】 isContinuous() | 判定 矩阵 row 是否是连续存储 Reports whether the matrix is continuous or not.— isContinuous...

isContinuous() | 判定 矩阵 row 是否是连续存储


Reports whether the matrix is continuous or not.— isContinuous() 方法原文档

判定 矩阵 row 是否是连续存储,是连续存储,那么在进行矩阵元素操作时,一些处理 function 就可以把整个矩阵元素 视为 width * height 的一维向量 【long single-row vectors】

1

2

对应处理方法,在对 Mat 进行运算变换之后, 返回 Mat 的 clone() ;

2-2

isContinuous() 测试验证
该代码参考的博文

2-3

测试代码如下

# 实际用不到这么多 头文件
#include <random>
#include <iostream>
#include <vector>
#include <memory>
#include <string>
#include <algorithm>

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

// 判定 Mat 连续方法测试
void isContinuousTest() {
	Mat src = imread("eat.jpg");//原始图像是256*256  
	cv::imshow("src", src);
	printf("---src.isContinuous=%d", src.isContinuous());	printf("\n");//直接imread的Mat是连续的
	
	cv::Rect rect(1, 1, 100, 100);
	cv::Mat crop_img = src(rect);//裁剪后的图像是不连续的
	cv::imshow("crop_img", crop_img);
	printf("---crop_img.isContinuous=%d", crop_img.isContinuous());	printf("\n");
	
	cv::Mat crop_img2;
	//crop_img2.create(crop_img2.size(), crop_img2.type());
	crop_img2 = crop_img.clone();//重新clone()后的图像是连续的
	printf("---crop_img2.isContinuous=%d", crop_img2.isContinuous());	printf("\n");
}

int main()
{
	isContinuousTest();

	cout << "end ..." << endl;
	return 0;

}



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

为什么会关注这个问题


原因: 在对Mat 元素进行变换操作后,返回的Mat 变得不连续,导致 OpenCV 方法 后续 Mat 计算数值存在误差
解决方法:return dst.clone(); 返回一个 连续的 Mat 出去 | 在做一些变换操作之后,进行连续性判定,如果不连续,则 进行 clone() ;

  • face_identification.cpp

3-1
3-2

  • process.cpp – 具体原因分析

3-3


文章来源: positive.blog.csdn.net,作者:墨理学AI,版权归原作者所有,如需转载,请联系作者。

原文链接:positive.blog.csdn.net/article/details/118570615

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。