如何最好地使用Android手机的相机和OpenCV检测不同的LED颜色?

11 浏览
0 Comments

如何最好地使用Android手机的相机和OpenCV检测不同的LED颜色?

我正在尝试使用OpenCV在安卓手机上识别和区分黑色背景下的LED灯的颜色,但目前遇到了困难。迄今为止,我的调查指出存在两个独立的问题:

  1. 使用OpenCV时,相机似乎默认为自动白平衡,这使得很难区分某些颜色。使用原生的安卓相机,最好的图像似乎是在设置为"多云"的白平衡下产生的。
  2. OpenCV提供的图像是在RGB颜色空间中的,然而RGB与人类感知的颜色之间的距离不匹配,这意味着欧几里德的RGB距离度量不是最佳解决方案(参见如何比较两种颜色)。

因此,我有三个问题:

  1. 在Android Java或OpenCV中是否有一种方法可以设置相机的白平衡,以影响OpenCV返回的结果图像?
  2. 如果没有,是否有一种可用的算法(最好是Java)来修改OpenCV图像的白平衡?
  3. 是否有一种可用的算法(同样是Java),可以将RGB颜色转换为更好地匹配人类感知颜色之间距离的另一种颜色空间?

谢谢

0
0 Comments

如何最好地使用Android手机的摄像头和OpenCV检测不同的LED颜色?

为了从黑色背景中识别不同的LED颜色,我提出以下解决方案:

首先,使用OpenCV的cvtColor函数将RGB转换为HSV颜色空间。在这里,HSV代表色调(如红色、绿色、黄色、蓝色等)、饱和度(颜色的饱和度)和值(亮度)。转换后,每个RGB值都会有一个对应的HSV值。与RGB一样,HSV也有三个通道:H、S和V。

其次,由于你只关心LED的颜色,请仅分析色调分量来确定LED的颜色。例如,你可以对色调通道进行阈值处理,确定图像中哪部分的色调位于10到25之间等等...绘制/打印阈值图像以检查你的代码。

以下是具体的代码实现:

# Import the necessary libraries
import cv2
# Load the image with the LED colors
image = cv2.imread("led_colors.jpg")
# Convert the image from RGB to HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Extract the hue channel from the HSV image
hue_channel = hsv_image[:, :, 0]
# Threshold the hue channel to detect specific LED colors
lower_threshold = 10
upper_threshold = 25
thresholded_image = cv2.inRange(hue_channel, lower_threshold, upper_threshold)
# Display the thresholded image
cv2.imshow("Thresholded Image", thresholded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码将加载包含LED颜色的图像,并将其从RGB转换为HSV颜色空间。然后,从HSV图像中提取色调通道,并对色调通道进行阈值处理,以检测特定的LED颜色。最后,显示阈值图像。

你可以根据需要调整阈值范围,并根据绘制/打印的阈值图像来验证你的代码。

希望对你有所帮助!

0
0 Comments

问题的出现原因:可能是由于Android手机的相机设备驱动程序是否可以通过Android的相机API来控制。

解决方法:可以通过使用OpenCV来检测不同的LED颜色。同时,可以参考提供的链接,了解如何在RGB颜色空间中检测颜色。另外,还可以使用简单的光敏电阻器来实现此功能,而不需要编写任何代码。

0
0 Comments

问题的出现原因:

提问者想要通过Android手机的摄像头和OpenCV来检测LED灯的不同颜色。提问者已经找到了一些相关的代码和方法,但仍然需要解决一些问题,例如如何设置白平衡和如何检测LED灯的不同颜色。

解决方法:

提问者使用了OpenCV教程中的代码,并修改了颜色效果方法以允许设置白平衡。他们还在主线程中添加了一个调用来设置正确的白平衡。对于问题3,他们使用了Java答案中的色彩逻辑算法。

以下是整理后的文章:

在Android手机上使用摄像头和OpenCV来检测不同颜色的LED灯,下面是一些解决方法。

首先,我们可以使用OpenCV教程中的代码,并修改颜色效果方法来实现设置白平衡。下面是一些相关的代码:

public List getWhiteBalanceList() {
    return mCamera.getParameters().getSupportedWhiteBalance();
}
public boolean isWhiteBalanceSupported() {
    return (mCamera.getParameters().getWhiteBalance() != null);
}
public String getWhiteBalance() {
    return mCamera.getParameters().getWhiteBalance();
}
public void setWhiteBalance(String whiteBalance) {
    Camera.Parameters params = mCamera.getParameters();
    params.setWhiteBalance(whiteBalance);
    mCamera.setParameters(params);
}

通过调用上述方法,我们可以设置正确的白平衡。例如:

mOpenCvCameraView.setWhiteBalance(Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT);

此外,为了检测不同颜色的LED灯,我们可以使用一个称为“Color Logic Algorithm”的Java答案。具体代码如下:

// Color Logic Algorithm

通过使用上述方法和算法,我们可以在Android手机上使用摄像头和OpenCV来检测不同颜色的LED灯。希望这些方法对你有帮助!

0