繁体   English   中英

如何从图像视图中的png中获取特定颜色的所有像素

[英]How to get all the pixels of a specific color from a png in an imageview

我正在尝试从imageview中的图像中获取特定颜色的所有像素。 甚至有可能这样做吗? 如果是这样,请指出正确的方向。 下面是我的图片 在此处输入图片说明

我需要红点所在的所有像素和绿点的所有像素。 这可能吗? 我不需要知道给定像素的颜色。 我需要打印所有包含红点的像素。 谢谢。 如果问题不清楚,请不要投票。

我认为您可以轻松地将图片转换为灰度并以直方图形式进行描述。 在那里,每个像素被分配一个介于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

您可以像Vladyslav Matviienko所说的那样遍历所有像素并检查它们的颜色。

  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 ,它在控制台中显示字典的内容)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM