Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 1
1

Как выделить преобладающий цвет в изображении?

29.11.2018, 13:51. Просмотров 648. Ответов 2


Я использую Emgucv(openCV) для сравнения изображения из папки 1 где примерно 1000 фото и 2 где 70 по общим точкам для нахождения идентичных(изображения разного разращения), однако,это занимает время.Появилась идея, фильтровать изображения в папке 2 пред сравниванием по наиболее схожему признаку. Например оттенку RGB или по уровню освещенности(но у меня не получилось реализовать) порошу помощи в этом вопросе
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2018, 13:51
Ответы с готовыми решениями:

Получить цвет пикселя в изображении
private void MainImage_OnMouseDown(object sender, MouseButtonEventArgs e) { ...

Часто используемый цвет на изображении
Есть изображение, нужно найти самый часто используемый цвет. Через GetPixel получил массив цветов....

Каким методом можно выделить область на изображении и поместить в буфер
Посоветуйте метод выделение, последующий шаг занести в буффер, чтобы можноего было обработать...

Преобладающий цвет на картинке
Нужно определить преобладающий цвет на картинке (графический файл). Для красного, зеленого, синего...

2
11 / 8 / 5
Регистрация: 28.11.2016
Сообщений: 48
Записей в блоге: 7
01.12.2018, 17:21 2
Можно попробовать так

C#
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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
 
        List<Color> R = new List<Color>();
        List<Color> G = new List<Color>();
        List<Color> B = new List<Color>();
        List<Color> RB = new List<Color>();
        List<Color> RG = new List<Color>();
        List<Color> BG = new List<Color>();
        List<Color> Y = new List<Color>();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\1.jpg");
 
            Raschet((Bitmap)pictureBox1.Image);
        }
 
        private void Raschet(Bitmap bmp)
        {
            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height; j++)
                {
                    Color col = bmp.GetPixel(i, j);
 
                    if (col.R > col.G && col.R > col.B) R.Add(col);
                    if (col.G > col.R && col.G > col.B) G.Add(col);
                    if (col.B > col.R && col.B > col.G) B.Add(col);
 
                    if (col.R < col.G && col.R < col.B) BG.Add(col);
                    if (col.G < col.R && col.G < col.B) RB.Add(col);
                    if (col.B < col.R && col.B < col.G) BG.Add(col);
                    else Y.Add(col);
                }
            }
 
            List<Color> lc = (R.Count > G.Count) ? R : G;
 
            lc = (lc.Count > B.Count) ? lc : B;
 
            lc = (lc.Count > RB.Count) ? lc : RB;
 
            lc = (lc.Count > BG.Count) ? lc : BG;
 
            lc = (lc.Count > RG.Count) ? lc : RG;
 
            lc = (lc.Count > Y.Count) ? lc : Y;
 
            int r = 0;
            int g = 0;
            int b = 0;
            foreach (Color c in lc)
            {
                r += c.R;
                g += c.G;
                b += c.B;
            }
 
            Color nc = Color.FromArgb(r / lc.Count, g / lc.Count, b / lc.Count);
 
            label1.BackColor = nc;
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            R.Clear();
            G.Clear();
            B.Clear();
            RB.Clear();
            RG.Clear();
            BG.Clear();
            Y.Clear();
 
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
 
            pictureBox1.Image = Image.FromFile(ofd.FileName);
 
            Raschet((Bitmap)pictureBox1.Image);
        }
    }
}
Суть проста. В начале алгоритм разбивает на составляющие цветов. Затем вычисляет среднее арифметическое преобладающего цвета.
0
11 / 8 / 5
Регистрация: 28.11.2016
Сообщений: 48
Записей в блоге: 7
02.12.2018, 14:27 3
В 45 строке нужно RG написать
if (col.B < col.R && col.B < col.G) RG.Add(col);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2018, 14:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как изменить цвет пикселей во всем изображении?
Всем знатокам доброго времени суток! Вопрос, собственно, в заголовке. Условие задачи: Есть...

Как выделить весь цвет в фотошопе волшебной палочкой?
На одном из видео, автор в несколько кликов посредством волшебной палочки выделил весь красный...

Заменить цвет на изображении
Приветствую Уважаемые! Подскажите пожалуйста как на изображении заменить все пиксели черного цвета...

Изменить цвет пикселя на изображении
Почему в телефоне приложение завершается (тоесть ошибка) если в загруженном BitMap изображении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.