私はopenCVで作業しており、2つの3チャンネルRGB画像を1つの6チャンネル画像に結合する必要があります。それらをどのように組み合わせていくのか正確にはわかりません。何か案は?
質問する
3157 次
2 に答える
2
まず、宛先マトリックスを作成する必要があります。最大(512) チャンネル
cv::Mat
の画像を作成できます。
たとえば、6 つの 8 ビット チャネルを持つ 640x480 の画像です。より一般的には、
入力が与えられると、適応する宛先マトリックスを取得できます。CV_CN_MAX
cv::Mat(cv::Size(640,480),CV_8UC(6))
s
cv::Mat(s.size(), CV_MAKETYPE(s.depth(), 6))
データ型とcv::Mat
コンストラクターを参照してください。
Mat::convertTo
両方の入力画像が同じ形式であることを確認するために使用したい場合があります。その後、 mixChannelsを使用します。
mixChannels(const Mat * src,
size_t nsrcs,
Mat * dst,
size_t ndsts,
const int * fromTo,
size_t npairs
)
2 つのソース イメージをコンテナーに配置する必要があります (マトリックスを割り当てると、明示的に要求されない限り、イメージ バッファーをコピーすることなく、新しいヘッダーが作成されることに注意してください)。
最後from_to
に、チャネル マッピングを使用してベクトルを作成します。s0 と s1 の入力画像が与えられ、次のマッピングを目指します。
s0 red -> 1st output channel
s0 green -> 2nd
s0 blue -> 3rd
s1 red -> 4th
s1 green -> 5th
s1 blue -> 6th
最終的なコードは次のようになります。
std::vector<cv::Mat> s;
s.resize(2); //Or `push_back` your 2 input images
s[0] = ... //1st input image
s[1] = ... //2nd input image
auto d = cv::Mat(s[0].size(), CV_MAKETYPE(s[0].depth(), 6));
int from_to[] = { 0,0, 1,1, 2,2, 3,3, 4,4, 5,5 };
cv::mixChannels(s.data(), s.size(), &d, 1, from_to, 6);
于 2012-05-14T02:09:00.613 に答える