s1081050 HW5

 

膚色偵測Skin Color Detection

目錄

作業說明

利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚
區域並將其標示出。(請用附件中的三張照片做測試)

開發環境

$ uname -srvmio
Linux 5.19.0-35-generic #36~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 17 15:17:25 UTC 2 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
$ pkg-config --modversion opencv4
4.5.4

程式碼說明

載入套件

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>

主程式

using namespace cv;
using namespace std;

int main(int argc, char ** argv){
    const char* filename = argc >=2 ? argv[1] : "img1.jpg";
    Mat Img = imread( samples::findFile( filename ));
    if( Img.empty()){
        cout << "Error opening image" << endl;
        return EXIT_FAILURE;
    }

    Mat hsvImg;
    cvtColor(Img, hsvImg, COLOR_BGR2HSV);
    // 定義膚色區間
    Scalar lower_bound(0, 48, 80);
    Scalar upper_bound(20, 255, 255);
    
    // 建立遮罩
    Mat mask;
    inRange(hsvImg, lower_bound, upper_bound, mask);

    // 將膚色區塊上色標記紅色
    for(int i = 0; i < Img.rows; i++){
        for(int j = 0; j < Img.cols; j++){
            if(mask.at<uchar>(i, j)){
                Img.at<Vec3b>(i, j)[0] = 0;
                Img.at<Vec3b>(i, j)[1] = 0;
                Img.at<Vec3b>(i, j)[2] = 255;
            }
        }
    }

    // set window size
    namedWindow("Input Image"       , WINDOW_NORMAL);
    // namedWindow("Output Image"      , WINDOW_NORMAL);
    // show image
    imshow("Input Image"       , Img   );
    // imshow("Output Image"      , mask);
    waitKey();
    return EXIT_SUCCESS;
}

執行結果

tags: CS362 s1081050 HW5

留言

這個網誌中的熱門文章

rzwang Homework #1

s1101438 Homework #1

s1093309 作業6