1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
1

Разделить изображение на 3 канала RGB

15.03.2019, 13:52. Показов 1614. Ответов 7

Подскажите функцию для разделения изображения на 3 канала, использую opencv c#
Нашла только split(IInputArray src,IOutputArray mv) но как потом из второго параметра вытянуть именно один канал(например red)? Либо может есть какие-то другие функции?


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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using System.Diagnostics;
using Emgu.CV.Util;
 
namespace LR1_OSI
{
    public partial class Form1 : Form
    {
        public Image<Bgr, Byte> img;
        public Emgu.CV.IImage imageGray, imgDilate, imgErode, imageBinary;
        public int  size_median;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void выбратьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                img = new Image<Bgr, Byte>(openFileDialog1.FileName);
                this.imageBox1.Image = img;
                this.imageBox2.Image = img;
            }
        }
 
        private void цветоваяСхемаToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
        }
 
        private void hSIToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Emgu.CV.IImage imageHls = new Image<Hls, Byte>(this.img.Bitmap);
            this.imageBox1.Image = imageHls;
 
        }
 
        private void hSVToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Emgu.CV.IImage imageHsv = new Image<Hsv, Byte>(this.img.Bitmap);
            this.imageBox1.Image = imageHsv;
        }
 
        private void labAbcToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Emgu.CV.IImage imageLab = img.Convert<Lab, Byte>();
            this.imageBox1.Image = imageLab;
        }
 
        private void СерыйЦветToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //CvInvoke.Split
            imageGray = img.Convert<Gray, Byte>();
            //IImage rgb = new List<IOutputArray>();
            //CvInvoke.Split(img, rgb);
        
            this.imageBox1.Image = imageGray;
        }
 
        private void нарисоватьГистограммуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Owner = this;
            f2.ShowDialog();
        }
 
        public void imageBox1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void обработкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
        }
 
        private void медианныйФильтрToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.Owner = this;
            f3.ShowDialog();
            
            IImage imageMedian = img.Convert<Gray, Byte>().SmoothMedian(size_median);
            this.imageBox1.Image = imageMedian;
           
        }
 
        private void проговаяБинаризацияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int blockSize = 25, param1 = 0;
            imageBinary = imageGray;
            CvInvoke.AdaptiveThreshold(imageGray, imageBinary, 255, AdaptiveThresholdType.MeanC, ThresholdType.Binary, blockSize, param1);
            this.imageBox1.Image = imageBinary;
 
        }
 
        private void дилатацияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            imgDilate = imageBinary;
            Point startPoint = new Point(-1,-1);
            int iterations = 5;
            MCvScalar cvScalar = new MCvScalar(1, 1);
            CvInvoke.Dilate(imageBinary, imgDilate, null, startPoint, iterations, BorderType.Default, cvScalar);
            this.imageBox1.Image = imgDilate;
        }
 
        private void эрозияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            imgErode = imageBinary;
            Point startPoint = new Point(-1, -1);
            int iterations = 5;
            MCvScalar cvScalar = new MCvScalar(1, 1);
            CvInvoke.Erode(imageBinary, imgErode, null, startPoint, iterations, BorderType.Default, cvScalar);
            this.imageBox1.Image = imgErode;
        }
 
        private void открытиеразмыканиеToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
        }
 
        private void закрытиеЗамыканиеToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
        }
    }
 
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2019, 13:52
Ответы с готовыми решениями:

Графика: Получение негатива отдельно для каждого цветового канала RGB изображения.
1) Получение негатива отдельно для каждого цветового канала RGB изображения. 2) Создание на...

Как разбить изображение на каналы RGB?
Разработайте функцию, разбивающую изображение на фрагменты, в каждом из которых остается только...

Конвертировать цветное изображение из RGB в HSV и отобразить в виде полутонового, состоящего из компоненты H
Добрый день. Подскажите, пожалуйста, в правильном ли направлении я двигаюсь в алгоритме работы с...

Разделить изображение на 4 части + RGB фильтрация
Итак, есть программа, оставляющая синюю составную часть загружаемой bmp картинки. Необходимо,...

7
Эксперт .NETАвтор FAQ
10262 / 5003 / 1814
Регистрация: 11.01.2015
Сообщений: 6,205
Записей в блоге: 34
15.03.2019, 23:31 2
Цитата Сообщение от Anastasia_Sail Посмотреть сообщение
Разделить изображение на 3 канала RGB
Метод Split возвращает массив Gray изображений - под одному на канал.
0
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
16.03.2019, 12:48  [ТС] 3
И как мне его применить, как оттуда вытянуть один канал? Или что?
0
547 / 470 / 314
Регистрация: 24.09.2013
Сообщений: 3,319
Записей в блоге: 1
16.03.2019, 19:14 4
Есть код получения этих трех компонентов цвета, если известен код (номер цвета) изображения.
Этот код лежит в пределах 0 - 16777215
0
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
16.03.2019, 20:12  [ТС] 5
Прошу прощения конечно, можно мне, тупой, показать на примере, пожалуйста?
0
547 / 470 / 314
Регистрация: 24.09.2013
Сообщений: 3,319
Записей в блоге: 1
16.03.2019, 20:35 6
Код, конечно, можно. У каждого цвета есть 3 составлющие. Что Вам нужно и что у Вас есть?

Добавлено через 13 минут
Думаю, понял, что нужно.
Задать любой цвет можно: Color.FromArgb(r,g,b);
Каждое из значений (r,g,b) в пределах 0 - 255
0
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
16.03.2019, 21:51  [ТС] 7
Хм. Ну, у меня есть изображение формата RGB, мне это изображение перевести в канал только красный а потом в серый.
Вот что-то типо того(2 картинка red)
Код всей своей проги я кидала, но если где именно должно это происходить так это по кнопке меню Серый цвет"(строка 69)
Миниатюры
Разделить изображение на 3 канала RGB  
0
547 / 470 / 314
Регистрация: 24.09.2013
Сообщений: 3,319
Записей в блоге: 1
16.03.2019, 22:12 8
Формата изображения RGB не существует. RGB - это только цвета(красн, зеленый, синий) и их сочетанием получатся любой из 16 милионов.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2019, 22:12

Смещение RGB канала
Как запрограммировать смещение RGB канала? Как на картинке Добавлено через 8 минут упс,...

Изображение в текстовом представлении rgb
Можно ли по средствам винапи пробежаться по всем пикселям изображения,чтобы записать в строку...

Как преобразовать изображение с RGB на YCrCb?
Здравствуйте не подскажете как преобразовать изображение с RGB на YCrCb? Я знаю как это делается с...

Преобразовать из матрицы в rgb (получить изображение)
помогите пожалуйста. дана матрица со значениями и нужно из них получить изображение (RGB)


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

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

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