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;
}
留言
張貼留言