對於你可以簡單地做一個RGB圖像計數藍色像素以下
- Inrange源圖像到藍色分量濾除,以二值圖像。
- 使用函數countNonZero計算二值圖像中的非零像素。
您可以參考下面的C++代碼,該怎麼辦呢
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat src,dst;
src = imread("rgb1.jpg",1);
inRange(src, Scalar(200,0,0), Scalar(255,50,50), dst); //In range with approximate blue range
cout<<"No of blue pixels---->"<<countNonZero(dst)<<endl;
imshow("src",src);
imshow("out",out);
waitKey(0);
return 0;
}
編輯: -
這裏是工作的Python代碼
import cv2
import numpy as np
img = cv2.imread("bgr.png")
BLUE_MIN = np.array([0, 0, 200], np.uint8)
BLUE_MAX = np.array([50, 50, 255], np.uint8)
dst = cv2.inRange(img, BLUE_MIN, BLUE_MAX)
no_blue = cv2.countNonZero(dst)
print('The number of blue pixels is: ' + str(no_blue))
cv2.namedWindow("opencv")
cv2.imshow("opencv",img)
cv2.waitKey(0)
希望這是什麼您正在尋找.....
EDIT2: -
正如@ kigurai下面評論認爲OpenCV的圖像中BGR爲了我給錯爲了BLUE_MIN和BLUE_MAX陣列。 所以在上面的代碼行
BLUE_MIN = np.array([0, 0, 200], np.uint8)
BLUE_MAX = np.array([50, 50, 255], np.uint8)
應改爲
BLUE_MIN = np.array([200, 0, 0], np.uint8) // minimum value of blue pixel in BGR order
BLUE_MAX = np.array([255, 50, 50], np.uint8)// maximum value of blue pixel in BGR order
歡迎來到Stack Overflow!我們不可能在沒有看到更多背景的情況下爲您提供幫助。你可以在這裏發佈你的實際代碼嗎?[描述你試過的東西](http://whathaveyoutried.com)?請務必檢查[問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。謝謝! –
您需要定義「藍色像素」的含義。 –