質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

4197閲覧

cv::gpu::GpuMat gpuDstという関数がどのように標準関数で書いてあるのか知りたいです。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/02/04 20:27

環境
Windows10 64bit
visual studio community 2017
opencv3.4

こちらがソースコードです

// laplacian by GPU // // (c)Copyright Spacesoft corp., 2013 rights reserved. // Hiro KITAYAMA //-------------------------------------------------------------------------- #include <opencv2/opencv.hpp> #include <opencv2/gpu/gpu.hpp> // <<-- #pragma comment(lib,"opencv_core246.lib") #pragma comment(lib,"opencv_gpu246.lib") // <<-- #pragma comment(lib,"opencv_highgui246.lib") //-------------------------------------------------------------------------- //main int main() { cv::Mat src = cv::imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE); if (src.empty()) exit(1); cv::gpu::GpuMat gpuSrc(src); cv::gpu::GpuMat gpuDst; cv::gpu::Laplacian(gpuSrc, gpuDst, 0); cv::Mat dst(gpuDst); cv::imshow("src", src); cv::imshow("dst", dst); cv::waitKey(0); return 0; } ```OPENCVを用いたGPUでのプログラミングの勉強しています。 ラプラシアン処理をするにあたってcv::gpu::GpuMat gpuDstというものが書いてあったのですが、どんな働きをするのか気になって調べてみました。すると```https://docs.opencv.org/ref/2.4/dd/dcd/classcv_1_1gpu_1_1GpuMat.html

のサイトにcv::gpu::GpuMat に関しては書いてあったのですが、gpuDstについては書いてありませんでした。なので結局cv::gpu::GpuMat gpuDstがどのような働きをするのかわかりませんでした。
今後もcv::gpu::GpuMat gpuDstのようなものがたくさん出てくると思います。どのように検索したり中身を調べたりするときに工夫すればいいでしょうか?
例えばcv::gpu::GpuMatとgpuDstに分けて調べてるとか。Dstは目的地destinationの略、そしてcv::gpu::GpuMatはリファレンスカウント付きのGPUメモリ用のスマートポインタを表すので、GPUメモリに処理後の画像を入れる働きをするのかなと推測しています。

質問の本題としてcv::gpu::GpuMat gpuDstがⅭ言語の標準関数でどのように書かれているか大変気になるのですが、cv::gpu::GpuMat gpuDstの中身というか標準関数でかかれた姿を見ることはできないでしょうか?
もしできるならば方法を教えていただけると大変ありがたいです。
ちなみにですがcv::gpu::GpuMat gpuDstの中身がどのように標準関数で書かれているのかを見るにはこちらのサイトの方法でできるのでしょうか?

https://qiita.com/h2suzuki/items/6b40f69bb287799d8bf6

長文ではありますがどうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

解決済とあるけど解決してないよね...

質問の本題としてcv::gpu::GpuMat gpuDstがⅭ言語の標準関数でどのように書かれているか大変気になるのですが、cv::gpu::GpuMat gpuDstの中身というか標準関数でかかれた姿を見ることはできないでしょうか?

GpuMatはGPU内で演算する特殊なMatのようですけど、だとするとGpuMatのナカミ(行列)はビデオカード内のメモリに格納されます。じゃないとGPUに計算させられん。

てことは、CPUメモリ/GPUメモリ双方向のコピーが必要。そんなの"Ⅽ言語の標準関数"には存在しません。
CUDAであればCUDA-APIに cudaMemcpyHostToDevice/cudaMemcpyDeviceToHost が定義されてて、
そいつを使ってCPU⇔GPUメモリ転送を行います。

投稿2018/02/05 23:19

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/02/06 01:05

詳しい解説どうもありがとうございます。 GPU特有のものでしたか、他の GPUの関数においてもCUDAの参考書を本屋に探してきます。
episteme

2018/02/06 01:09

そりゃそーでしょ。GPU周りが標準なわけがない。
episteme

2018/02/06 02:13

CUDAの教本読んでも GpuMatの実装が理解できるかは疑問です。 ざっくり読んでみたところ、CUDA-APIを生で使わず途中にライブラリを噛ませてるっポい。 ※ thrust云々をコード中に見かけたから、おそらく。
carnage0216

2018/02/07 22:16

調べてくださりどうもありがとうございます。
guest

0

ベストアンサー

ライブラリに詳しくはないですが、見た限りgpuDstって単に変数名ですよ。特定の働きをするものではなく、このプログラムの中で定義された語でしかありません。

投稿2018/02/04 21:11

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/02/04 21:45

変数ってint xのxのようなものでgpuDstもプログラムのどこかでgpuDstは定義されているのですね。 探してみます。
HogeAnimalLover

2018/02/04 21:50

どこかで、ではなく提示のプログラムの中で定義されています。このgpuDstは、このmain関数内だけで有効なもので、多分調べても出てきません(出てきたとしても同名の別物です) 独自名ですから別にxでもyでも(他の重複しない限り)何でもいいものです。
carnage0216

2018/02/04 21:54

cv::gpu::GpuMat gpuDstのcv::gpu::GpuMat がgpuDstを定義しているのですか? えーとgpuDst(という変数)はcv::gpu::GpuMatという働きをするよってことですか?
HogeAnimalLover

2018/02/04 21:59

「cv::gpu::GpuMat」というのはクラス(型)のことです。ですから cv::gpu::GpuMat gpuDst; はこの型の変数を定義するもの(この場合は特に「クラスのオブジェクト(インスタンスともいう)を定義する」と言います)です。つまりint x;と似たようなものです。
carnage0216

2018/02/04 22:16

理解しました。 ありがとうございます。
carnage0216

2018/02/05 08:32

ベストアンサーを付けさせて頂いた後で申し訳ないのですが、cv::gpu::GpuMatがクラスであるとどうやって知ったのでしょうか? 質問に載せたURL先に書いてあるとしたら私の見落としです。
carnage0216

2018/02/05 09:09

どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問