Pi实时视频颜色检测

时间:2017-02-02 13:56:03

标签: opencv raspberry-pi raspbian

我打算在电视机后面制作一个流光溢彩的效果。我想通过使用指向我电视的相机来实现这一目标。我认为最简单的方法是使用简单的ip-camera。我需要颜色检测来检测屏幕上的颜色并将其转换为LED灯条上的rgb值。

我家中间有一个Raspberry Pi作为枢纽。我正在考虑像这样使用它

Ip相机指向我的屏幕处理pi上的视频并将其转换为rgb值并将其发送到mqtt服务器。在我的电视后面收到我的nodeMCU上的颜色。

如何检测我的pi上的直播(多点)上的颜色?

1 个答案:

答案 0 :(得分:1)

如果您可以创建任何背景颜色,最佳方法可能是计算k均值或中位数以获得“最流行”的颜色。如果环境光在不同的地方可能不同,那么在图像边缘使用ROI,您可以检查该区域中的主要颜色(通过比较不同颜色的样本数量)。

如果您只有有限的颜色(例如只有R,G和B),那么您只需检查哪个通道在所需区域内具有最高强度。

我编写代码时假设您可以创建任何RGB环境颜色。

作为测试图像我使用这个: Input image

代码是:

#define UTF_WIDTH1_MAX       0x7F
#define UTF_WIDTH2_MAX       0x7FF
#define UTF_WIDTH3_MAX       0xFFFF
#define UTF_WIDTH4_MAX       0x10FFFF

void PrintCodepointUTF8(uint32_t codepoint) {
  uint8_t first;
  uint8_t continuation_bytes[3];
  unsigned continuation_bytes_n;
  if (codepoint <= UTF_WIDTH1_MAX) {
    first = codepoint;
    continuation_bytes = 0;
  } else if (codepoint <= UTF_WIDTH2_MAX) {
    // extract 5 bits for first and 6 bits for one continuation_byte
    // and set some bits
    first = ...;
    continuation_bytes = ...
    continuation_bytes_n = 1;
  } else   if (codepoint <= UTF_WIDTH4_MAX) {
    if (isasurrogate(codepoint)) fail.
    // else extract 4 bits for first and 6 bits for each continuation_byte
    // and set some bits
    first = ...;
    continuation_bytes = ...
    continuation_bytes_n = 2;
  } else   if (codepoint <= UTF_WIDTH4_MAX) {
    // extract 3 bits for first and 6 bits for each continuation_byte
    // and set some bits
    first = ...;
    continuation_bytes = ...
    continuation_bytes_n = 3;
  } else {
    fail out of range.
  }
  print first and 0-3 continuation_bytes
}

这给出了如下结果: Output image

我希望这有帮助!

编辑: 还有两个例子: Example1 Example2