gpt4 book ai didi

python - 计算图片中蓝色像素的个数

转载 作者:太空狗 更新时间:2023-10-29 21:31:54 24 4
gpt4 key购买 nike

我是 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))

-因此,根据您的建议,我构建了以下函数,但运行时得到的只是一张空白图片。

最佳答案

要计算 RGB 图像中的蓝色像素,您可以简单地执行以下操作

  1. Inrange将源图像过滤掉蓝色分量到二值图像。
  2. 使用函数 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)

希望这就是您要找的......

编辑2:-

正如@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

关于python - 计算图片中蓝色像素的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com