opencv —— 同時識別三種顏色


要點:

1.識別一種顏色

minH = 16; //色相 maxH = 35; 
minS
= 160; //飽和度 maxS = 255;
minV
= 50; //亮度
maxV
= 255; // inRange(原圖像, 最小值的范圍, 最大值的范圍, 輸出圖像); //將圖像二值化,即輸出圖像是黑白二值圖像,其中 最小值<=像素點<=最大值 的像素點是白色 inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg);

2.識別圖片中的黃藍紅三色

//創建三個 Mat 來分別存儲識別黃藍紅三色並二值化后的圖片
Mat yellowImg, blueImg, redImg; for (int i = 0; i < 3; i++){ switch (i){ case 0: //黃色
        minH = 16; maxH = 35; minS = 160; maxS = 255; minV = 50; maxV = 255; // inRange(原圖像, 最小值的范圍, 最大值的范圍, 輸出圖像); //將圖像二值化,即輸出圖像是黑白二值圖像,其中 最小值<=像素點<=最大值 的像素點是白色
 inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg); break; case 1: //藍色
        minH = 70; maxH = 120; minS = 150; maxS = 255; minV = 50; maxV = 255; inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), blueImg); break; case 2: //紅色
        minH = 0; maxH = 15; minS = 160; maxS = 255; minV = 50; maxV = 255; inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), redImg); break; default: printf("顏色標志輸入錯誤\n"); } }

3.合並三張圖片

Mat resultImg; Mat yeBluImg; //圖像算數運算————bitwise_or() 合並運算(或) 
bitwise_or(yellowImg, blueImg, yeBluImg);
bitwise_or(yeBluImg, redImg, resultImg);

4.圖片去噪

//開操作 (去除一些噪點):先腐蝕,再膨脹,可清除一些小東西(亮的),放大局部低亮度的區域
//如果二值化后圖片干擾部分依然很多,增大下面的size
Mat eleOpen = getStructuringElement(MORPH_RECT, Size(6, 6));//返回指定形狀和尺寸的結構元素 morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen);

 

代碼示例:

#include<opencv.hpp>
using namespace cv; using namespace std; int main(){ Mat srcImg = imread("C:/Users/齊明洋/Desktop/tem2.png"); Mat hsvImg; //將RGB顏色空間轉換為HSV顏色空間
 cvtColor(srcImg, hsvImg, COLOR_BGR2HSV); int minH = 0; int maxH = 0; int minS = 0; int maxS = 0; int minV = 0; int maxV = 0; Mat yellowImg, blueImg, redImg; for (int i = 0; i < 3; i++){ switch (i){ case 0: //黃色
            minH = 16; maxH = 35; minS = 160; maxS = 255; minV = 50; maxV = 255; // inRange(原圖像, 最小值的范圍, 最大值的范圍, 輸出圖像); //將圖像二值化,即輸出圖像是黑白二值圖像,其中 最小值<=像素點<=最大值 的像素點是白色
 inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg); break; case 1: //藍色
            minH = 70; maxH = 120; minS = 150; maxS = 255; minV = 50; maxV = 255; inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), blueImg); break; case 2: //紅色
            minH = 0; maxH = 15; minS = 160; maxS = 255; minV = 50; maxV = 255; inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), redImg); break; default: printf("顏色標志輸入錯誤\n"); } } Mat resultImg; Mat yeBluImg; //圖像算數運算————合並(或)
 bitwise_or(yellowImg, blueImg, yeBluImg); bitwise_or(yeBluImg, redImg, resultImg); //開操作 (去除一些噪點) 如果二值化后圖片干擾部分依然很多,增大下面的size
    Mat eleOpen = getStructuringElement(MORPH_RECT, Size(6, 6));//返回指定形狀和尺寸的結構元素
 morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen); 

      imshow("原始圖片", srcImg);
      imshow("識別結果", resultImg);

 

 waitKey(0); return 0; }

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM