Используя захват видео в процессе обработки, я хочу понять, как настроить небольшой раздел канала камеры, который камера будет постоянно сканировать. В этом определенном разделе я хочу, чтобы камера искала изменение яркости (то есть, теперь яркость становится темной.) Если меняется яркость, я просто хочу, чтобы она вернула «обнаружен тень». Может ли кто-нибудь помочь мне начать? Я очень новичок в этом языке.Извлечь пиксельные данные при обработке
ответ
Предполагая, что данные камеры, которые вы анализируете, являются PImage, вы можете применять фильтры к данным, чтобы получить их в форме черно-белой или серой шкалы. Должны быть полезны документы в режимах фильтра PImage: https://processing.org/reference/filter_.html.
Возможно, вам понадобится выполнить анализ пикселей - здесь может быть библиотека, но вы можете получить массив пикселей из фильтрованного PImage, пропустить его и проверить значения в соответствии с вашими базовыми значениями, чтобы увидеть, они ярче или темнее. Если они имеют шкалу серого в шкале 0 - 255, вы можете определить, светятся ли они, если число, превышающее базовое значение, или более темное число ниже.
Вы можете легко получить небольшой участок камеры (или любое изображение) с помощью метода PImage get(), с помощью которого вы передаете кучу координат, описывающих прямоугольник сечения (x, y, ширина, высота).
Это также известно как область интереса (ROI) в компьютерном зрении.
Как только вы извлечете этот регион, вы можете его обработать. Вот минимальный пример, показывающий, как получить ROI и обработать его (в этом случае просто делает порог, основываясь на положении мышей:.
import processing.video.*;
Capture cam;
int w = 320;
int h = 240;
int np = w*h;
int roiX = 80;
int roiY = 60;
int roiW = 160;
int roiH = 120;
PImage roi;
void setup(){
size(w,h);
cam = new Capture(this,w,h);
cam.start();
}
void draw(){
image(cam,0,0);
if(roi != null){
//process ROI
// roi.filter(GRAY);
roi.filter(THRESHOLD,(float)mouseX/width);
//display output
image(roi,roiX,roiY);
}
}
void captureEvent(Capture c){
c.read();
roi = c.get(roiX,roiY,roiW,roiH);
}
Вы можете получить яркость пикселя с помощью функции brightness() Это означает, вы можете получить среднюю яркость вашего ROI, добавив уровни яркости для каждого пикселя, а затем разделив результат на общее число пикселей:
import processing.video.*;
Capture cam;
int w = 320;
int h = 240;
int np = w*h;
int roiX = 80;
int roiY = 60;
int roiW = 160;
int roiH = 120;
PImage roi;
void setup(){
size(w,h);fill(127);
cam = new Capture(this,w,h);
cam.start();
}
void draw(){
image(cam,0,0);
if(roi != null){
//process ROI
// roi.filter(GRAY);
roi.filter(THRESHOLD,(float)mouseX/width);
//display output
image(roi,roiX,roiY);
text("ROI brightness:"+brightness(roi),10,15);
}
}
void captureEvent(Capture c){
c.read();
roi = c.get(roiX,roiY,roiW,roiH);
}
float brightness(PImage in){
float brightness = 0.0;
int numPixels = in.pixels.length;
for(int i = 0 ; i < numPixels; i++) brightness += brightness(in.pixels[i]);
return brightness/numPixels;
}
Если вы установили рентабельность инвестиций, чтобы покрыть светлую область, вы следует видеть, что средняя яркость снижается по мере появления тени. Просто с помощью порогового значения в состоянии должны позволить действовать на него:
import processing.video.*;
Capture cam;
int w = 320;
int h = 240;
int np = w*h;
int roiX = 80;
int roiY = 60;
int roiW = 160;
int roiH = 120;
PImage roi;
float brightness = 0.0;
float shadowThresh = 127.0;
void setup(){
size(w,h);fill(127);
cam = new Capture(this,w,h);
cam.start();
}
void draw(){
image(cam,0,0);
if(roi != null){
//process ROI
// roi.filter(GRAY);
roi.filter(THRESHOLD,(float)mouseX/width);
brightness = brightness(roi);
if(brightness < shadowThresh) println("shadow detected");
//display output
image(roi,roiX,roiY);
text("ROI brightness:"+brightness,10,15);
}
}
void captureEvent(Capture c){
c.read();
roi = c.get(roiX,roiY,roiW,roiH);
}
float brightness(PImage in){
float brightness = 0.0;
int numPixels = in.pixels.length;
for(int i = 0 ; i < numPixels; i++) brightness += brightness(in.pixels[i]);
return brightness/numPixels;
}
Надеется, что эти примеры легко читать и понимать. Обратите внимание, что это не так быстро, как они могут быть. Не забудьте также проверить видео примеров, которые приходят с обработкой (Примеров> Библиотека> видео> Захват), особенно это: BrightnessThresholding, BrightnessTracking
Если вы хотите узнать больше о методах, как это вы должны взгляните на компьютерное зрение и библиотеку OpenCV. Существует очень хороший OpenCV Processing library, который теперь можно легко установить через Sketch> Import Library ...> Добавить библиотеку ... и выберите OpenCV для обработки. Он также содержит примеры использования яркости.
Это покрывает сторону манипуляции с пикселями, но еще одним важным аспектом такого рода разработки является настройка. Очень важно иметь надежную настройку: это облегчит вашу жизнь.Я имею в виду, что в вашем случае:
- Управление камерой: возможность управления автоматическим балансом белого/яркостью/и т. Д. поскольку автоматические корректировки могут сбросить ваши значения.
- , имеющий контроль над сценой: убедитесь, что вы уменьшаете риски случайных огней, возиться с вашим отслеживанием или что-то натыкающееся на камеру или объект, который вы отслеживаете.
- 1. Самый быстрый способ извлечь отдельные пиксельные данные?
- 2. Отключить данные при обработке
- 3. Как получить пиксельные данные из .PNG?
- 4. Изменить исходные пиксельные данные WriteableBitmap?
- 5. Как извлечь пиксельные данные из изображения DIcom, чтобы просмотреть его в n iPhone
- 6. Как сохранить данные полей при обработке исключения?
- 7. «Потерянные данные» при обработке данных в WTForm
- 8. Извлечь данные NSURL при загрузке
- 9. Как кодировать пиксельные данные в видеоформат?
- 10. Как получить пиксельные данные из пути?
- 11. Gimp: сохранить пиксельные данные в .xls?
- 12. Javascript Canvas Получить изображения пиксельные данные
- 13. Grabbing Пиксельные данные из видео strem
- 14. Binarize пиксельные данные QR Code Reader
- 15. iOS: Получайте пиксельные данные с камеры
- 16. Пиксельные координаты opencv, C++
- 17. При обработке сервера
- 18. FreeImage: пиксельные данные, к которым обращаются FreeImage_GetBits, неверны (данные + размер)
- 19. буфер при обработке элементов
- 20. Получить пиксельные данные из сканированного PDF-документа в Java
- 21. Извлечь данные из ViewModel
- 22. ошибка при обработке JSON
- 23. Ошибки при обработке файлов
- 24. Пиксельные круги при масштабировании с помощью SKSpriteNode
- 25. Django: данные о санитарной обработке?
- 26. Java ThreadPoolExecutor зависание при обработке
- 27. SSAS ошибка при обработке
- 28. Непредсказуемое поведение при обработке
- 29. Ошибка при обработке ошибок
- 30. Исключения при обработке JSON
Это именно то, что я искал. благодарю вас за подробное объяснение - я с нетерпением жду возможности поиграть с этим и изменить его для своего проекта. – Kingyyy