前提・実現したいこと
OPENCV3を使っています。
現在、グレースケールをした画像を平滑化して円を検出したいのですがうまく表示されません。
初心者なので原因を教えてくださると助かります。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> //cv::Mat等の場合のcv::を省略する using namespace cv; //std::を省略する。 using namespace std; int main(int argc, char* argv[]) { //カラー画像のあるMatからカラー画像を読み込む。 cv::Mat color_img = imread("sample.png"); //グレースケールを入れておくためのMat cv::Mat gray_img; //グレースケールを平滑化した画像を入れておくためのMat cv::Mat heikatu_img; //円検出をした画像を入れておくためのMat cv::Mat circle_img; //グレースケールに変換(カラー画像のあるMatから読み込んだ画像をグレースケールにしてからグレースケールを入れておくためのMatに入れる。) cvtColor(color_img, gray_img, CV_BGR2GRAY); //グレースケールに変換した画像を平滑化(グレースケール画像のあるMatから読み込んだ画像を平滑化してから平滑化を入れておくためのMatに入れる。) GaussianBlur(gray_img, heikatu_img, cv::Size(5, 5), 0); //グレースケールを平滑化した画像を円検出して円検出をした画像を入れておくためのMatに入れる。 vector<cv::Vec3f>circles; cv::HoughCircles(heikatu_img, circle_img, cv::HOUGH_GRADIENT, 1, 100, 20, 50); vector<cv::Vec3f>::iterator it = circles.begin(); for (size_t i = 0; i < circles.size(); ++i) { cv::circle( circle_img, cv::Point(cvRound(circles[i][0]), cvRound(circles[i][1])), cvRound(circles[i][2]), cv::Scalar(0, 0, 255), 2 ); } //円検出した画像を入れておくためのMatの中にある円検出した画像を表示する。 imshow("円検出画像", heikatu_img); //何かキーを押すまでそのままの状態を維持する。 waitKey(0); return 0; }
試したこと
デバックをおこないましたがエラーは出なかったのですが画像の表示がうまくされません。
具体的に言うと表示した画像が灰色一色になっています。
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー