私はを使用して、3チャネルcv::Mat
にアクセスする方法を知っています。しかし、今私はn
チャネルcv::Mat
とn
は(cv::Vec<uchar, n>
を使用する)定数ではありません。今すぐcv::Mat
チャンネルにアクセスするにはどうすればよいですか?opencvでMatのn番目のチャンネルにアクセスするには?
3
A
答えて
2
たとえば、n = 10
と言って、の4th
チャンネルにアクセスしたいとします。ここに簡単な例があります:
typedef cv::Vec<uchar, 10> Vec10b;
// ....
// Create the mat
cv::Mat_<Vec10b> some_mat;
// Access 4th channel
uchar value = some_mat.at<Vec10b>(i,j)(4);
// or
uchar value = some_mat.at<Vec10b>(i,j)[4];
希望します。 typedef
行を省略できることに注意してください。この方法は簡単だと思います。
0
任意の数のチャネルを処理できるようにするには、cv::Mat::ptr
といくつかのポインタ算術演算を使用できます。例えば
、次のようになりますのみCV_8U
データ型をサポートする単純なアプローチ:
#include <opencv2/opencv.hpp>
#include <cstdint>
#include <iostream>
inline uint8_t get_value(cv::Mat const& img, int32_t row, int32_t col, int32_t channel)
{
CV_DbgAssert(channel < img.channels());
uint8_t const* pixel_ptr(img.ptr(row, col));
uint8_t const* value_ptr(pixel_ptr + channel);
return *value_ptr;
}
void test(uint32_t channel_count)
{
cv::Mat img(128, 128, CV_8UC(channel_count));
cv::randu(img, 0, 256);
for (int32_t i(0); i < img.channels(); ++i) {
std::cout << i << ":" << get_value(img, 32, 32, i) << "\n";
}
}
int main()
{
for (uint32_t i(1); i < 10; ++i) {
test(i);
}
return 0;
}
関連する問題
- 1. OpenCV Matオブジェクトのアクセス値UINT16
- 2. Pythonでn番目の次元にアクセスする
- 3. クリップボードのN番目のアイテムにアクセスする
- 4. opencv :: MatをMat *にコピーする*
- 5. OpenCV Matクラス:マルチチャネルマトリックスの要素へのアクセス
- 6. JavaのOpenCV Mat要素へのアクセス
- 7. OpenCV Matを16Bitで1チャンネル書き込む
- 8. Pythonでn番目(n-1)番目の項を取る方法は?
- 9. jquery名前付きJSON要素のn番目のレコードにアクセス
- 10. n番目の項目
- 11. は、n番目の子
- 12. :n番目の子は
- 13. n番目の子は、
- 14. n番目の子
- 15. 値をJavaScriptのn-1番目の変数に渡さずに関数のn番目の変数に渡す
- 16. OpenCV Mat :: Mulのパラメータ
- 17. MatのOpenCV C++エラー:
- 18. Mat画像のチャンネルをどのように循環させるのですか? (OpenCV)VS2010
- 19. jQueryのn番目の子
- 20. n番目の子()jqueryの
- 21. CSSテーブル:n番目の子は、(1)TD:n番目の子(1)
- 22. AndroidのARGB_8888イメージをネイティブOpenCVのMatに変換するには
- 23. SQLiteでN番目のパーセンタイルを見つけるには?
- 24. OpenCV Mat CV_32FC1
- 25. OpenCV Mat corrupt
- 26. o(1)の配列のn番目のインデックスへのアクセス
- 27. opencv Matを2dグリッドに作成する
- 28. BufferedImageをOpenCvに変換するMat
- 29. n番目の子と
- 30. テーブルと:: n番目の子
@DimChtzの答えは完璧です、あなたもあなたのマットとのアクセスに '.toListを()'使用することができます要素。 –
['cv :: Mat :: ptr'](http://docs.opencv.org/3.1.0/d3/d63/classcv_1_1Mat.html#a47ead5654d6577e63a3e154b57976a36)を使用してください。 @RickM。 –
私はこれをJavaと混在させていると思います。 C++ APIにはこのようなことはありません。あなたが参照している答えは完全ではありません。チャンネル数をハードコードする必要があるため、問題を完全に解決することはできません。 @RickM。 –