0

下面是我在MATLAB中实现的一行,表示矩阵的行列是灵活的。我可以添加任意数量的维度为 3 的对象。我需要在 OpenCV 中做同样的事情。

ColorValues(:,:,3)=0;

下面是我要转换为 OpenCV 的代码:

ColorValues(:,:,3)=0;
for i=1:M
    for j=1:N
        if (bw(i,j)==0)
            ColorValues(i,j,:)=image(i,j,:);
        else
            ColorValues(i,j,:)=0;
        end
    end
end
4

2 回答 2

0

我不认为你想在这里实现的目标是使用 opencv 实现的。查看矩阵构造函数。您不需要分配内存 - 或在不需要时立即释放它;如果您使用默认构造函数:

Mat A;

这将创建一个“灵活”的矩阵。如果您想要定义类型(如 3 个通道);那么你也需要定义大小。没有为此目的的构造函数。

一种解决方案可以创建非灵活数据:

Mat B(1,3,CV_8UC1);

然后使用该矩阵中的颜色数据。

作为另一种方法,您可能想看看 C++ 的标准库;和list结构vector可以帮助你。

vector<vector<int> > imageCoordinates;
vector<int> RGB(3);

将创建灵活的图像平面;并在单独的数据中固定了 3 通道。

于 2013-07-11T11:34:27.390 回答
0

这是 OpenCV 中的一个示例。我们使用Mat::setTo方法使用与输入图像相同大小的掩码将图像中的值“归零”。

#include "opencv2/highgui/highgui.hpp"

int main()
{
    // read an RGB image
    cv::Mat img = cv::imread("lena.png", cv::IMREAD_COLOR);
    if (!img.data) {
        return -1;
    }

    // create a circular mask
    cv::Mat mask = cv::Mat::zeros(img.rows, img.cols, CV_8UC1);
    cv::circle(mask, cv::Point(img.rows/2,img.cols/2), 150, cv::Scalar(255), CV_FILLED);

    // mask out the "on" values by setting them to zero
    img.setTo(cv::Scalar::all(0), mask);

    // show result
    cv::namedWindow("demo", cv::WINDOW_AUTOSIZE);
    cv::imshow("demo", img);
    cv::waitKey(0);

    return 0;
}

图片

于 2013-07-12T21:50:36.750 回答