我正在尝试从imageview中的图像中获取特定颜色的所有像素。甚至有可能这样做吗?如果是这样,请指出正确的方向。以下是我的图片
我需要红点所在的所有像素和绿点的所有像素。这可能吗?我不需要知道给定像素的颜色。我需要打印所有包含红点的像素。谢谢。如果问题不清楚,请不要投票。
答案 0 :(得分:1)
我认为您可以轻松地将图片转换为灰度并以直方图形式进行描述。在那里,每个像素被分配一个介于0-255之间的对应值。使用此信息,您可以提取所有红色和绿色像素。
您应该寻找OpenCV4Android:
以下是OpenCV的概述:
https://docs.opencv.org/3.1.0/d1/db7/tutorial_py_histogram_begins.html
Android安装指南:
https://medium.com/@sukritipaul005/a-beginners-guide-to-installing-opencv-android-in-android-studio-ea46a7b4f2d3
答案 1 :(得分:0)
您可以按照Vladyslav Matviienko所说的那样遍历所有像素并检查其颜色。
示例:
const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('2d');
const pixels;
function draw(canvas, ctx) {
ctx.fillStyle = '#fff';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#f00';
ctx.fillRect(0, 0, 3, 3);
ctx.fillRect(0, 10, 3, 3);
ctx.fillStyle = '#00f';
ctx.fillRect(10, 0, 3, 3);
ctx.fillRect(10, 10, 3, 3);
}
function getPixelsByColors(canvas, ctx) {
let pixel;
let color;
let dict = {};
for (let i = 0; i < canvas.width; i++) {
for (let j = 0; j < canvas.height; j++) {
pixel = ctx.getImageData(i, j, 1, 1);
color = getColorFromPixel(pixel);
if (!dict[color]) {
dict[color] = [];
}
dict[color].push({ x: i, y: j });
}
}
return dict;
}
function getColorFromPixel(pixel) {
let red = pixel.data[0];
let green = pixel.data[1];
let blue = pixel.data[2];
let alpha = pixel.data[3];
let color = red + '-' + green + '-' + blue + '-' + alpha;
return color;
}
draw(canvas, ctx);
pixels = getPixelsByColors(canvas, ctx);
console.log('pixels', pixels);
尝试一下(这里是jsfiddle,它在控制台中显示词典的内容)。