2012-09-01 95 views
3

是否有可能使PC的网络摄像头充当环境光线传感器? 我在Windows 8 pro中使用.Net 4.5框架。使用网络摄像头作为PC中的环境光线传感器

+0

你的意思是检测摄像头可以看到的房间里有多少光线?只需使用WIA或其他库来拍摄照片,然后查看像素以确定它们有多暗或暗。 –

+0

感谢您的回复。我将搜索并理解WIA的使用,我也在寻找Aforge .net是否可以提供帮助。但是,你能帮我理解我能如何通过像素来确定它吗? –

回答

1

菲利普的回答这个问题:How to calculate the average rgb color values of a bitmap有代码,将计算bitmat图像的平均RGB值(BM在他的代码):

BitmapData srcData = bm.LockBits(
     new Rectangle(0, 0, bm.Width, bm.Height), 
     ImageLockMode.ReadOnly, 
     PixelFormat.Format32bppArgb); 

int stride = srcData.Stride; 

IntPtr Scan0 = dstData.Scan0; 

long[] totals = new long[] {0,0,0}; 

int width = bm.Width; 
int height = bm.Height; 

unsafe 
{ 
    byte* p = (byte*) (void*) Scan0; 

    for (int y = 0; y < height; y++) 
    { 
    for (int x = 0; x < width; x++) 
    { 
     for (int color = 0; color < 3; color++) 
     { 
     int idx = (y*stride) + x*4 + color; 

     totals[color] += p[idx]; 
     } 
    } 
    } 
} 

int avgR = totals[0]/(width*height); 
int avgG = totals[1]/(width*height); 
int avgB = totals[2]/(width*height); 

一旦你的平均RGB值,你可以使用颜色。 GetBrightness来确定它是如何光明或黑暗。 GetBrightness将返回0到1之间的数字,0是黑色,1是白色。您可以使用这样的事情:

Color imageColor = Color.FromARGB(avgR, avgG, avgB); 
double brightness = imageColor.GetBrightness(); 

你也可以将RGB值转换为HSL,并期待在“L”,这可能是更准确,我不知道。

+0

感谢您的回复,这将适用于亮度部分。从你之前的评论中,我正在寻找WIA,以及它如何能够访问cam并找到本文http://social.msdn.microsoft.com/Forums/en-US/tailoringappsfordevices/thread/38ce76d0-8d1f-4c20 -a06e-67a9a919c9ee - 这表示Windows 8不支持WIA:( –

+0

@indranilpal如果您阅读了链接,Rob Caplan说:“问题和答案是针对Metro风格的应用程序的,WIA支持桌面应用程序。”它可以在Windows 8上运行,而不是在Metro应用程序上,普通的dekstop应用程序可以使用WIA。此外,还有很多库用于访问网络摄像头。 –

+0

是的,我忽略了这一部分...它支持桌面模式。如果我遇到任何问题,我会尽力实施它并让你知道。 –