我是openCV和Python的新手,并且有一个问题。我试图找到图片的蓝色像素数量,以便我可以将它们用作阈值,以便与其他图片进行比较。我试过查看文档,但我找不到任何有用的东西。
任何人都可以给出提示或帮助吗?
BLUE_MAX = np.array([0, 0, 200], np.uint8)
BLUE_MIN = np.array([50, 50, 255], np.uint8)
dst = cv.inRange(img, BLUE_VALUE_MIN, BLUE_VALUE_MAX)
no_blue = cv.countNonZero(dst)
print('The number of blue pixels is: ' + str(no_blue))
- 根据你的推荐,我建立了以下功能,但是当我运行它时我得到的只是一张空白图片。
答案 0 :(得分:9)
要计算RGB图像中的蓝色像素,您只需执行以下操作
您可以参考下面的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)
希望这就是你要找的......
正如@ 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
答案 1 :(得分:2)
如果您要在拍摄的图像中查找蓝色像素,我建议先转换为HSV色彩空间,然后查找蓝色的色彩范围。这样,您可以忽略亮度组件。
请参阅this question了解HSV色彩空间中的色彩范围。