Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将Mat图像转换为矢量<;点>;_C++_Opencv - Fatal编程技术网

C++ 如何将Mat图像转换为矢量<;点>;

C++ 如何将Mat图像转换为矢量<;点>;,c++,opencv,C++,Opencv,有没有办法将Mat图像转换为矢量 这不起作用: Mat input = imread("image.png"); vector<Point> points; points = input; Mat input=imread(“image.png”); 矢量点; 点数=输入; 请解释如何将图像转换为点。向量中的每个点都有什么意义 可以通过迭代矩阵来填充向量 您可以通过构造函数将3x1,1x3或1x2,2x1 Mat数组指定给Point2f、Point3f结构 这个线程可能会有帮助,

有没有办法将Mat图像转换为矢量

这不起作用:

Mat input = imread("image.png");
vector<Point> points;

points = input;
Mat input=imread(“image.png”);
矢量点;
点数=输入;

请解释如何将图像转换为点。向量中的每个点都有什么意义

可以通过迭代矩阵来填充向量

您可以通过构造函数将3x1,1x3或1x2,2x1 Mat数组指定给Point2f、Point3f结构

这个线程可能会有帮助,

您可以轻松手动操作,直接使用mat的行/列索引创建点:

//Create a blank mat of size 3x3 and an empty point vector
cv::Mat img = cv::Mat::zeros(cv::Size(3, 3), CV_8UC3);
std::vector<cv::Point> points;

//Loop over each pixel and create a point
for (int x = 0; x < img.cols; x++)
    for (int y = 0; y < img.rows; y++)
        points.push_back(cv::Point(x, y));

//Print out results
for (cv::Point p : points)
    std::cout << p << "\n";
//创建一个3x3大小的空白垫和一个空点向量
cv::Mat img=cv::Mat::Zero(cv::Size(3,3),cv_8UC3);
std::向量点;
//在每个像素上循环并创建一个点
对于(int x=0;x在OpenCV中没有这样的转换并不奇怪,因为将图像表示为向量效率极低。但是,如果您需要这样做,是什么阻止您编写2-4行代码来执行此转换?图像有点,每个点都保存数据。8位黑白图像有WxH点,每个点有一个UCHAR值。研究。我认为点有成员“值”。你想访问像素的颜色通道吗?我有二值图像,想测量Hausdorff距离来比较两个图像,需要矢量中的黑色像素。我是这样做的:提取通道(输入,输入,0);findNonZero(输入,点);但我不知道为什么白色像素有非零值而非黑色。每个通道(通常)有8位,范围从0到255。值0表示黑色像素,值255表示白色像素。如果要查找黑色像素,可以执行按位不将黑色翻转为白色,然后执行findNonZero()以查找点。编辑-对于二值图像,每个像素只有两个可能的值0-1(而不是0-255),但想法是一样的。如果只有两个可能的像素值,则已经有了一个二值图像。OpenCV必须为二进制图像使用8位通道,这就是为什么要将0(00000000)和255(11111111)作为两个可能的值。一个1位通道,它会给你0和1,但不会有什么区别,你仍然只有黑色和白色像素。如果你仍然有困难提出一个新问题,我会在可能的时候写一个例子。编辑-使用img获取通道值。对于点3i、点3f,在(点)点有两个元素x、y或三个元素x、y、z。如果需要表示像素的颜色值,可以使用标量。