拼圖中分離指定色塊
【1】原圖
【2】結果圖
【3】代碼
#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat image = imread("03.jpg");
imshow("input", image);
//Mat showImage = image.clone();
Mat dstImage = Mat::zeros(image.rows, image.cols, CV_8UC3);
// 色彩空間轉換
Mat hsv, mask;
cvtColor(image, hsv, COLOR_BGR2HSV);
inRange(hsv, Scalar(125, 100, 46), Scalar(150, 255, 255), mask);
imshow("mask", mask);
//imwrite("D:/mask.png", mask);
// 形態學開操作
Mat se = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
morphologyEx(mask, mask, MORPH_OPEN, se);
imshow("binary", mask);
//imwrite("binary.png", mask);
// 輪廓發現
vector<vector<Point>> contours;
vector<Vec4i> hiearchy;
findContours(mask, contours, hiearchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (int index = 0; index < contours.size(); index++)
{
Scalar color(255, 0, 0);
drawContours(dstImage, contours, index, color, FILLED, 8, hiearchy);
}
imshow("result", dstImage);
imwrite("result01.jpg", dstImage);
waitKey(0);
return 0;
}
【4】HSV模型顏色參考