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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

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

Q&A

1回答

410閲覧

C++,OpenCVをもちいて画像から粒の直径を求めたい

tune1362

総合スコア10

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

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

0グッド

1クリップ

投稿2017/07/22 14:30

###前提・実現したいこと
C++でプログラムを書こうとしたところうまく行きません.
当方C++については全くの初心者です.参考書,サイトを見ながら組んではみたもののうまく動きません.何卒ご助力のほどよろしくお願いいたします.

現在の状態といたしましては,main関数に上記のreturn n, return sの値が戻らず,式及び数値が表示されない状態です.

###該当のソースコード

C++

1#include<opencv2/core/core.hpp> 2#include<opencv2/highgui/highgui.hpp> 3#include<opencv2/imgproc/imgproc.hpp> 4#include<iostream> 5#include<conio.h> 6#include "Source.h" 7#include <string> 8using namespace cv; 9using namespace std; 10 11 12int kazu() { 13 Mat img = imread("seed.jpg", IMREAD_UNCHANGED); 14 Mat gray_img; 15 cvtColor(img, gray_img, CV_BGR2GRAY); 16 Mat bin_img; 17 adaptiveThreshold(gray_img, bin_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 99, 8); 18 bin_img = ~bin_img; 19 Mat element = Mat::ones(5, 5, CV_8UC1); 20 21 erode(bin_img, bin_img, element, Point(-1, -1), 1); 22 erode(bin_img, bin_img, element, Point(-1, -1), 1); 23 erode(bin_img, bin_img, element, Point(-1, -1), 1); 24 erode(bin_img, bin_img, element, Point(-1, -1), 1); 25 26 vector<vector<Point> > contours; 27 findContours(bin_img, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); 28 for (int i = 0; i < contours.size(); i++) { 29 int count = contours.at(i).size(); 30 double x = 0; double y = 0; 31 for (int j = 0; j < count; j++) { 32 x += contours.at(i).at(j).x; 33 y += contours.at(i).at(j).y; 34 } 35 x /= count; 36 y /= count; 37 circle(img, Point(x, y), 5, Scalar(0, 0, 255), 2, 4); 38 } 39 int n; 40 n = contours.size(); 41 42 imshow("IMAGE", img); 43 return n; 44} 45 46 47double keisan() { 48 Mat img = imread("seed.jpg", IMREAD_UNCHANGED); 49 Mat gray_img; 50 cvtColor(img, gray_img, CV_BGR2GRAY); 51 Mat bin_img; 52 adaptiveThreshold(gray_img, bin_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 99, 8); 53 bin_img = ~bin_img; 54 Mat element = Mat::ones(5, 5, CV_8UC1); 55 56 vector<vector<Point> > contours; 57 findContours(bin_img, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); 58 59 double s = 0; 60 int max_area_contour = -1; 61 for (int j = 0; j < contours.size(); j++) { 62 double area = contourArea(contours.at(j)); 63 s = s+area; 64 } 65 return s; 66} 67int main() { 68 int a = kazu(); 69 double b = keisan(); 70 double d; 71 d = pow(4 * b / 3.14 / a, 0.5); 72 cout << "個数" << a << endl << "面積" << b << endl<<"直径"<<d<<endl; 73 return 0; 74} 75

###補足情報()
やりたいこととしては粒体の画像を読み取り,それの直径を求めるというものです.現在,動画をソフトで画像にした後その画像をプログラムで編集している状態です.可能であれば動画のままプログラムで読み込んで,プログラムの中で動画を一定の間隔で画像を抜き取り,それらの編集したいのですがこのようなことは可能でしょうか?

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

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

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

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

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

guest

回答1

0

私の環境(Windows10, Visual Studio 2015)ではおそらく正常動作しました。
検証をしづらいので、『粒状の画像』とその直径などのテストデータを示していただきたいです。

main関数に上記のreturn n, return sの値が戻らず、式及び数値が表示されない状態です。

この発言の意味がわからないです。
常に0がreturnされてしまうのか、その前にランタイムエラーで止まってしまうのか、
エラーメッセージがあるならそれを追記してください。


プログラミングの経験があるようですから、もう少し読みやすいコードを書いて下さい。
kazu keisanが何をしようとしているのか、関数名から予測不能です。
一文字の変数も、少なくともデバッグを依頼するときには使わないでください。
また、もう少しコードをまとめてください。同じ処理を複数書いています。

警告も多く出ています。必要な部分は明示的にstatic_castしてください。
ただし、C4819は無視して結構です。


可能であれば動画のままプログラムで読み込んで,プログラムの中で動画を一定の間隔で画像を抜き取り,それらの編集したいのですがこのようなことは可能でしょうか?

可能です。OpenCVでは、『画像処理のループ』として動画を処理することが出来ます。
cv::VideoCapture()の使い方を調べてみてください。

投稿2017/07/22 15:16

編集2017/07/22 15:55
LouiS0616

総合スコア35658

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問