Как получить все пиксели определенного цвета из PNG в просмотре изображений - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить все пиксели определенного цвета из изображения в просмотре изображений. Можно ли вообще сделать что-то подобное? если так, пожалуйста, укажите мне в правильном направлении. Ниже мое изображение enter image description here

Мне нужны все пиксели, где находятся красные точки, и все пиксели зеленых точек. Это возможно? Мне не нужно знать цвет данного пикселя. Мне нужно распечатать все пиксели, которые содержат красные точки. Благодарю. Пожалуйста, не голосуйте, если вопрос не ясен.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вы можете пройтись по всем пикселям и проверить их цвет, как сказал Владислав Матвиенко.

  1. Покажите свою картинку
  2. Создать словарь
  3. Перебор всех ваших пикселей
  4. Получить цвет текущего пикселя
  5. Если ваш словарь уже содержит текущий цвет, добавьте его в массив (какой ключ является цветом)
  6. Если словарь не содержит текущий цвет, создайте экземпляр массива (ключ которого является цветом), а затем добавьте к нему цвет.

Пример:

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 , который отображает содержимое словаря в консоли).

0 голосов
/ 27 июня 2018

Я думаю, вы можете легко преобразовать свою картинку в оттенки серого и изобразить ее в гистограмме. Там каждому пикселю присваивается соответствующее значение в диапазоне 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

А вот пример проекта:
https://github.com/opencv/opencv/blob/master/samples/android/image-manipulations/src/org/opencv/samples/imagemanipulations/ImageManipulationsActivity.java

...