我没有看到数据从 cv::Mat 到 int 的传输

问题描述 投票:0回答:1

我正在探索 OpenCv 的功能并尝试手动实现 k-means 聚类(我知道一个现成的函数)。 在编写代码时,我收到错误

“E0413 不存在从 cv::MatExpr”到“int”的合适转换函数

第 32 行。 你能帮我吗?

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"


#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace cv;

cv::Mat k_means_clustering(cv::Mat image, int k, int max_iterations = 1000) {
    cv::Mat pixels = image.reshape(1, image.total());
    pixels.convertTo(pixels, CV_32F);
    cv::Mat center = initialize_center(pixels, k);

    cv::Mat labels(pixels.rows, 1, CV_32S);

    for (int iteration = 0; iteration < max_iterations; iteration++) {
        labels = assign_to_clusters(pixels, center);
        cv::Mat new_center = update_center(pixels, labels, k);
        if (cv::countNonZero(center != new_center) == 0) {
            break;
        }
        center = new_center;
    }
    center.convertTo(center, CV_8U);

    cv::Mat segmented_image = center.row(labels.t()).reshape(3, image.rows).clone();
    return segmented_image;
}

第 32 行是 return 语句之前的那一行。

我尝试将变量声明更改为

cv::Mat_<int> labels;

但是出现错误

E0413 不存在从“cv::MatExpr”到“int”的合适转换函数

c++ opencv mat
1个回答
0
投票

问题是对

cv::Mat::row
的调用,它接受一个整数作为参数。但是,您传入的是
labels.t()
——即转置的
Mat
(即使它是 1x1 仍然不会被视为整数)。

– 丹·马塞克

© www.soinside.com 2019 - 2024. All rights reserved.