###前提・実現したいこと
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
###補足情報()
やりたいこととしては粒体の画像を読み取り,それの直径を求めるというものです.現在,動画をソフトで画像にした後その画像をプログラムで編集している状態です.可能であれば動画のままプログラムで読み込んで,プログラムの中で動画を一定の間隔で画像を抜き取り,それらの編集したいのですがこのようなことは可能でしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。