Skip to main content

Detects colors in images 10 x faster than Numpy

pip install locate-pixelcolor-c

Tested against Windows 10 / Python 3.10 / Anaconda

How to use it in Python

import numpy as np
import cv2
from locate_pixelcolor_c import search_colors
# 4525 x 6623 x 3 picture https://www.pexels.com/pt-br/foto/foto-da-raposa-sentada-no-chao-2295744/
picx = r"C:\Users\hansc\Downloads\pexels-alex-andrews-2295744.jpg"
pic = cv2.imread(picx)
colors0 = np.array([[255, 255, 255]],dtype=np.uint8)
resus0 = search_colors(pic=pic, colors=colors0)
colors1=np.array([(66,  71,  69),(62,  67,  65),(144, 155, 153),(52,  57,  55),(127, 138, 136),(53,  58,  56),(51,  56,  54),(32,  27,  18),(24,  17,   8),],dtype=np.uint8)
resus1 =  search_colors(pic=pic, colors=colors1)
####################################################################
%timeit search_colors(pic=pic, colors=colors0)
17.6 ms ± 245 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# last update: 16.3 ms

b,g,r = pic[...,0],pic[...,1],pic[...,2]
%timeit np.where(((b==255)&(g==255)&(r==255)))
150 ms ± 209 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
####################################################################
%timeit resus1 =  search_colors(pic=pic, colors=colors1)
138 ms ± 10 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# last update: 117 ms


%timeit np.where(((b==66)&(g==71)&(r==69))|((b==62)&(g==67)&(r==65))|((b==144)&(g==155)&(r==153))|((b==52)&(g==57)&(r==55))|((b==127)&(g==138)&(r==136))|((b==53)&(g==58)&(r==56))|((b==51)&(g==56)&(r==54))|((b==32)&(g==27)&(r==18))|((b==24)&(g==17)&(r==8)))
1 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
####################################################################

The C Code

void colorsearch(unsigned char *pic, unsigned char *colors, int width, int totallengthpic, int totallengthcolor, int *outputx, int *outputy, int *lastresult)
{
    int counter = 0;

    for (int i = 0; i <= totallengthcolor; i += 3)
    {
        int r = colors[i];
        int g = colors[i + 1];
        int b = colors[i + 2];
        for (int j = 0; j <= totallengthpic; j += 3)
        {
            if ((r == pic[j]) && (g == pic[j + 1]) && (b == pic[j + 2]))
            {

                int dividend = j / 3;
                int quotient = dividend / width;
                int remainder = dividend % width;
                int upcounter = counter;
                outputx[upcounter] = quotient;
                outputy[upcounter] = remainder;
                lastresult[0] = upcounter;
                counter++;
            }
        }
    }
}
// gcc -O2 -fPIC -shared -o cloop.so cloop.c

Metadata

Release files for locate-pixelcolor-c 0.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for locate-pixelcolor-c 0.12
File Size Uploaded Provenance Actions
locate_pixelcolor_c-0.12.tar.gz 35.0 kB Without provenance Details for locate_pixelcolor_c-0.12.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for locate-pixelcolor-c 0.12
File Interpreter ABI Platform Actions
locate_pixelcolor_c-0.12-py3-none-any.whl Python 3 none any Details for locate_pixelcolor_c-0.12-py3-none-any.whl

Total release size: 71.2 kB

Release files / locate_pixelcolor_c-0.12.tar.gz

Download URL locate_pixelcolor_c-0.12.tar.gz
Size 35.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4637a0e63bd6aa650d4144b85080527641a9d410b3730d1c85ffb3bbb9bd2ee9
BLAKE2b-256 checksum
How to use checksums
cb6fedd1f7396a1101bc20411dd7b06d5ff207779de3690cce03836d818d50ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.10

Release files / locate_pixelcolor_c-0.12-py3-none-any.whl

Download URL locate_pixelcolor_c-0.12-py3-none-any.whl
Size 36.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b2a69b3765be766bfd0b15e8673e23dfe6e65de0dbae31e608e45c92535645e0
BLAKE2b-256 checksum
How to use checksums
83dbb9cec98546c32d86653b33bcb3b30cb9dedc54672cbf8d8c494fffb6e142
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.10

Security for locate-pixelcolor-c 0.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.12 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page