-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
103 lines (95 loc) · 3.52 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
document.addEventListener('DOMContentLoaded', () => {
const videoPreview = document.getElementById('videoPreview');
const fileInput = document.getElementById('fileInput');
const toggles = document.querySelectorAll('input[type="checkbox"]');
const processBtn = document.getElementById('processBtn');
let originalMat, currentMat, videoInterval;
let isVideo = false;
fileInput.addEventListener('change', loadMedia);
toggles.forEach(toggle => toggle.addEventListener('change', processImage));
processBtn.addEventListener('click', processImage);
function loadMedia(event) {
const file = event.target.files[0];
const url = URL.createObjectURL(file);
if (file.type.startsWith('video/')) {
isVideo = true;
videoPreview.src = url;
videoPreview.style.display = 'block';
videoPreview.play();
videoPreview.addEventListener('play', () => {
videoInterval = setInterval(() => {
if (!videoPreview.paused && !videoPreview.ended) {
processFrame();
}
}, 1000 / 30);
});
videoPreview.addEventListener('pause', () => clearInterval(videoInterval));
videoPreview.addEventListener('ended', () => clearInterval(videoInterval));
} else {
isVideo = false;
const img = new Image();
img.src = url;
img.onload = () => {
originalMat = cv.imread(img);
processImage();
};
}
}
function processFrame() {
const cap = new cv.VideoCapture(videoPreview);
const frame = new cv.Mat(videoPreview.height, videoPreview.width, cv.CV_8UC4);
cap.read(frame);
originalMat = frame;
processImage();
}
function processImage() {
if (!originalMat) return;
currentMat = originalMat.clone();
let displayMat;
if (document.getElementById('rgbToggle').checked) {
displayMat = currentMat.clone();
}
if (document.getElementById('hsvToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2HSV);
}
if (document.getElementById('hsvHToggle').checked) {
cv.extractChannel(currentMat, currentMat, 0);
}
if (document.getElementById('hsvSToggle').checked) {
cv.extractChannel(currentMat, currentMat, 1);
}
if (document.getElementById('hsvVToggle').checked) {
cv.extractChannel(currentMat, currentMat, 2);
}
if (document.getElementById('hslToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2HLS);
}
if (document.getElementById('xyzToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2XYZ);
}
if (document.getElementById('labToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2Lab);
}
if (document.getElementById('lutToggle').checked) {
// Custom LUT processing logic
}
if (document.getElementById('cmykCToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2CMYK);
cv.extractChannel(currentMat, currentMat, 0);
}
if (document.getElementById('cmykMToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2CMYK);
cv.extractChannel(currentMat, currentMat, 1);
}
if (document.getElementById('cmykYToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2CMYK);
cv.extractChannel(currentMat, currentMat, 2);
}
if (document.getElementById('cmykKToggle').checked) {
cv.cvtColor(currentMat, currentMat, cv.COLOR_RGB2CMYK);
cv.extractChannel(currentMat, currentMat, 3);
}
cv.imshow('videoPreview', currentMat);
currentMat.delete();
}
});