肌色検出の最後の描画のところでエラーが出てしまします
画像のサイズの問題なのかとおもいますが、
どう間違えているのか、どう改善したらのいいかわかりません。
開発環境
Visual Studio C++ OpenCV3
エラー文
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow
C++
1int main(int argc, const char** argv) 2{ 3 // グレースケールで画像読み込み 4 cv::Mat src = cv::imread("faces.jpg", cv::IMREAD_GRAYSCALE); 5 cv::Mat ori = src; 6 cv::Mat hsv_img; 7 cv::Mat smooth_img; 8 cv::Mat hsv_skin_img; 9 // 画像の読み込みに失敗したらエラー終了する 10 if (src.empty()) 11 { 12 std::cerr << "Failed to open image file." << std::endl; 13 return -1; 14 } 15 16 hsv_skin_img = cv::Scalar(0, 0, 0); 17 cv::medianBlur(src, smooth_img, 7); //ノイズがあるので平滑化 18 smooth_img = cv::Mat(cv::Size(640, 480), CV_8UC3); 19 cv::cvtColor(smooth_img, hsv_img, CV_BGR2HSV); //HSVに変換 20 21 for (int y = 0; y < 480; y++) 22 { 23 for (int x = 0; x < 640; x++) 24 { 25 int a = hsv_img.step*y + (x * 3); 26 if (hsv_img.data[a] >= 0 && hsv_img.data[a] <= 15 && hsv_img.data[a + 1] >= 50 && hsv_img.data[a + 2] >= 50) //HSVでの検出 27 { 28 hsv_skin_img.data[a] = 255; //肌色部分を青に 29 } 30 } 31 } 32 33 // 二値化 34 cv::Mat bin; 35 36 cv::namedWindow("肌色", cv::WINDOW_AUTOSIZE); 37 cv::imshow("肌色", hsv_skin_img); 38 39}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。