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::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 に答える
0

ここで達成したいことはopencvでは不可能だと思います。マトリックス コンストラクターを見てください。メモリを割り当てる必要はありません。または、必要がなくなったらすぐに解放してください。デフォルトのコンストラクターを使用する場合:

Mat A;

これにより、「柔軟な」マトリックスが作成されます。タイプを定義したい場合 (3 チャンネルとして); 次に、サイズも定義する必要があります。そのためのコンストラクターはありません。

1 つの解決策は、次のように非柔軟なデータを作成することです。

Mat B(1,3,CV_8UC1);

次に、このマトリックスのカラー データを使用します。

別のアプローチとして、C++ の標準ライブラリを参照することをお勧めします。listおよびvector構造体が役立つ場合があります。

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

柔軟なイメージ プレーンを作成します。および別のデータの固定 3 チャネル。

于 2013-07-11T11:34:27.390 に答える