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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

受付中

c++ 動画の顔にモザイクをかける

rerererere
rerererere

総合スコア0

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

0回答

0グッド

0クリップ

265閲覧

投稿2022/11/30 17:39

前提

Opencvを用いたc++のプログラミングについて
動画にモザイクをかける

実現したいこと

USBカメラからの画像を顔検出で顔の部分だけ切り取り、その切り取った部分にモザイクをかけ顔にモザイクがかかるというようなことをしたいのですが、切り取った画像をモザイクにするところまでできたのですがそれを元の動画に張り付けることが出来ません。

該当のソースコード

c++

1#include <opencv2/opencv.hpp> 2#include <opencv2/imgcodecs.hpp> 3using namespace cv; 4using namespace std; 5 6int main(void) { 7 CascadeClassifier cascade, cascade2; 8 cascade.load("haarcascade_frontalface_default.xml");//正面顔情報が入っているカスケードファイル読み込み 9 VideoCapture cap(0); 10 if (!cap.isOpened())return -1; 11 Mat original, img, bg; 12 Mat roi_img; 13 while (true) { 14 cap >> original; 15 cap >> img; 16 cap >> bg; 17 if (img.empty())break; 18 cvtColor(bg, bg, COLOR_RGB2RGBA); 19 20 vector<Rect> faces; 21 cascade.detectMultiScale(bg, faces, 1.1, 4, 0, Size(20, 20)); 22 Mat wimage = original.clone(); 23 for (int i = 0; i < faces.size(); i++) //検出した顔の個数"faces.size()"分ループを行う 24 { 25 Rect roi1(faces[i].x, faces[i].y, faces[i].width, faces[i].height); 26 wimage(roi1).copyTo(roi_img); 27 double rate = (double)faces[i].width / roi_img.cols; 28 resize(roi_img, roi_img, Size(), rate, rate); 29 erode(roi_img, roi_img, Mat(), Point(-1, -1), 10); 30 dilate(roi_img,roi_img, Mat(), Point(-1, -1), 3); 31 32 Mat roi2 = bg(Rect(faces[i].x, faces[i].y, roi_img.cols, roi_img.rows)); 33 roi_img.copyTo(roi2, roi_img); 34 } 35 imshow("roi", roi_img); 36 imshow("bg", bg); 37 imshow("original", original); 38 39 waitKey(30); 40 } 41 destroyAllWindows(); 42 return 0; 43}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

fana

2022/12/01 06:23 編集

> 元の動画に張り付けることが出来ません 「元の動画に張り付ける」とは具体的にどういう意味ですか? コードを見た感じでは,bg には「モザイクをかけた」状態が反映されていそうにも見えますが,実装にはそうなっていない,というような意味でしょうか?
fana

2022/12/01 06:23 編集

あと,コードを示す場合,主題に関わらない部分は雑音となり得るので,現象が再現する必要最低限の状態を作って示すと良いかと思います. 例えば,常に3フレーム1組で取得するような処理は不思議に思えるし,そのうち1個しかempty()の判定をしないこと等も何か気になってしまう. 他にも wimageは不要に思えるし,resizeも意味がないのでは?とか何とか etc etc... それらが質問で扱おうとする主題と関係ないのであれば,質問する際には取っ払った方が良い. やりたいことが「画像のある一部を切り出して,それにモザイクをかけ,その結果を元々の画像の該当部分に反映させたい」で合っているなら,キャプチャ処理や検出器すらも不要.

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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