Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для WMC
86 / 86 / 1
Регистрация: 15.11.2011
Сообщений: 192

Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов

10.01.2016, 05:22. Показов 1425. Ответов 3

Студворк — интернет-сервис помощи студентам
Необходимо добавить такой функционал в tcp клиент.
Есть цветные изображения 720*480, на них пятна с красноватым оттенком (они нам и нужны).
Загружаем изображение в приложение и сначала нужно оставить элементы только необходимого цветового диапазона, Например: R, от 1 до 255 и только там, где он превалирует (значение R больше, чем у G и B в отдельности). RGB: 50, 10, 200 - пропускаем, RGB: 50, 20, 25 - берём. Т.е. остались только красноватые пятна, а остальное стало белым например.
Затем нужно сделать изображение монохромным. Затем нужно получить одномерный массив значений пикселов этого монохромного изображения, чтобы этот массив потом передать.
Миниатюры
Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов   Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов  
Вложения
Тип файла: rar TCPclient.rar (95.4 Кб, 4 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2016, 05:22
Ответы с готовыми решениями:

Получить из файла BMP матрицу значений пикселов
уважаемые программисты никак не могу справиться со следующей задачей. мне необходимо получить из bmp файла значение его пикселов в виде...

Получить массив пикселов IMG
Здравствуйте. Могу ли я получить массив пикселов IMG, к примеру? Пусть я отобразил изображение, нужно воспользоваться специфическим...

Получить таблицу значений функции (одномерный массив)
Получить таблицу значений функции U, при изменении “х” от 1 до 3 с шагом 1 и при изменении “y” от 0,5 до 2 с ...

3
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
12.01.2016, 16:05
Лучший ответ Сообщение было отмечено WMC как решение

Решение

Это, наверное, не прямой ответ на ваш вопрос, а скорее информация к выбору решения. Проект и краткие пояснения в архиве.
Миниатюры
Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов  
Вложения
Тип файла: zip cAnalyzer.zip (1.28 Мб, 6 просмотров)
6
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
13.01.2016, 23:47
Лучший ответ Сообщение было отмечено WMC как решение

Решение

Еще один вариант отбора
VB.NET
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
Imports System.IO
Imports System.Drawing.Imaging
Public Class Form1
    Private bmpBase As Bitmap
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        bmpBase = New Bitmap("Ф4_X40.bmp")
        PictureBox1.Image = bmpBase
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim rc As New Rectangle(0, 0, bmpBase.Width, bmpBase.Height)
        Dim bmp As Bitmap = bmpBase.Clone(rc, PixelFormat.Format24bppRgb)
        'установки цвета
        Dim rr As Integer = CInt(ColorScroller1.Red)
        Dim gg As Integer = CInt(ColorScroller1.Green)
        Dim bb As Integer = CInt(ColorScroller1.Blue)
        Dim zone As Integer = CInt(NumericUpDown4.Value) 'границы яркости в %
        Dim lm As Single = Color.FromArgb(rr, gg, bb).GetBrightness
        Dim bmpMap As Bitmap = luminMapping(bmp, rr, lm, zone)
        PictureBox2.Image = bmpMap
        bmpMap.Save("mapRGB.bmp", ImageFormat.Bmp)
    End Sub
    Public Function luminMapping(ByVal bbm As Bitmap, ByVal cr As Byte, ByVal lumin As Single, ByVal zz As Integer) As Bitmap
        Try
            Dim w As Integer = bbm.Width
            Dim h As Integer = bbm.Height
            Dim rect As New Rectangle(0, 0, w, h)
            Dim bmpResult As Bitmap = bbm.Clone(rect, PixelFormat.Format24bppRgb)
            Dim bmpData As BitmapData = bmpResult.LockBits(rect, Drawing.Imaging.ImageLockMode.ReadWrite, bmpResult.PixelFormat)
            Dim ptr As IntPtr = bmpData.Scan0
            Dim allbytes As Integer = bmpData.Stride * h
            Dim rgbV(allbytes - 1) As Byte
            Dim lum1, lum2, lum As Single
            'границы RED
            Dim rr1 As Int16 = cr - 10
            Dim rr2 As Int16 = cr + 10
            If rr1 < 0 Then rr1 = 0
            If rr2 > 255 Then rr2 = 255
            'границы яркости
            getLuminBounds(lumin, zz / 100, lum1, lum2)
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbV, 0, allbytes)
            For i As Integer = 0 To rgbV.Length - 1 Step 3
                lum = Color.FromArgb(rgbV(i + 2), rgbV(i + 1), rgbV(i)).GetBrightness
                'только по RED (+-10)
                If rgbV(i + 2) > rr1 AndAlso rgbV(i + 2) < rr2 Then
                    'по яркости
                    If lum > lum1 AndAlso lum < lum2 Then
                        rgbV(i) = 0
                        rgbV(i + 1) = 0
                        rgbV(i + 2) = 255
                    Else
                        rgbV(i) = 0
                        rgbV(i + 1) = 0
                        rgbV(i + 2) = 0
                    End If
                Else
                    rgbV(i) = 0
                    rgbV(i + 1) = 0
                    rgbV(i + 2) = 0
                End If
            Next
            System.Runtime.InteropServices.Marshal.Copy(rgbV, 0, ptr, allbytes)
            bmpResult.UnlockBits(bmpData)
            Return bmpResult
        Catch ex As Exception
            MsgBox(ex.ToString)
            Return Nothing
        End Try
    End Function
    Private Sub getLuminBounds(ByVal lm As Single, ByVal zz As Single, ByRef lm1 As Single, ByRef lm2 As Single)
        lm1 = lm - zz / 2
        lm2 = lm + zz / 2
        If lm1 < 0 Then lm1 = 0
        If lm2 > 1 Then lm2 = 1
    End Sub
End Class
Миниатюры
Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов  
2
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
14.01.2016, 21:35
Лучший ответ Сообщение было отмечено WMC как решение

Решение

Если нет желания разбираться в деталях, можно воспользоваться внешними библиотеками. Например, AForge.NET (http://www.aforgenet.com/). Там есть много чего интересного, в том числе использование различных фильтров. Привожу код преобразования растра с использованием этой библиотеки (на рисунках отражена последовательность преобразований).
VB.NET
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
Imports System.Drawing.Imaging
Imports AForge
Imports AForge.Imaging
Imports AForge.Imaging.Filters
'…
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    Dim bmp00 As Bitmap = New Bitmap("Ф4_X40.bmp")
    Dim rc As New Rectangle(0, 0, bmp00.Width, bmp00.Height)
    Dim bmpR As Bitmap = bmp00.Clone(rc, PixelFormat.Format24bppRgb)
    'фильтрация
    'устанавливаем фильтр
    Dim fr As ColorFiltering = New ColorFiltering()
    'задаем диапазоны цвета для фильтра
    fr.Red = New IntRange(210, 250)
    fr.Green = New IntRange(170, 210)
    fr.Blue = New IntRange(150, 190)
    'применяем фильтр
    fr.ApplyInPlace(bmpR)
    bmpR.Save("mapR.bmp", ImageFormat.Bmp)
    'преобразуем в серый
    'Dim gr As New Filters.Grayscale(0.2125, 0.7154, 0.0721)
    Dim gr As New Filters.Grayscale(0.299, 0.587, 0.114)
    Dim grBmp As Bitmap = gr.Apply(bmpR)
    grBmp.Save("mapRgr.bmp", ImageFormat.Bmp)
    Dim grBmpCopy As Bitmap = grBmp.Clone()
    'выделяем границы
    Dim bnd As CannyEdgeDetector = New CannyEdgeDetector(0, 70)
    bnd.ApplyInPlace(grBmp)
    grBmp.Save("mapRgr2.bmp", ImageFormat.Bmp)
    'преобразуем в ч/б
    Dim ft As IterativeThreshold = New IterativeThreshold(2, 128)
    Dim nmBmp As Bitmap = ft.Apply(grBmpCopy)
    nmBmp.Save("mapBW.bmp", ImageFormat.Bmp)
End Sub
Миниатюры
Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов   Оставить нужные элементы на изображении,сделать монохромным, получить одномерный массив значений пикселов  
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2016, 21:35
Помогаю со студенческими работами здесь

Массив одномерный. Проверить, можно ли, меняя элементы массива А, получить массив В
составьте программу проверяющую можно меняя элементы одномерного массива А, получить одномерный массив В Добавлено через 1 минуту ...

Одномерный массив, получить в порядке возрастания все различные элементы, входящие в массив
одномерный массив, содержащий n элементов, получить в порядке возрастания все различные элементы, входящие в массив

Получить одномерный массив,состоящий из средних арифметических значений элементов строк матрицы.
Народ,помогите пожалуйста составить программу и блок-схему к ней. Дана квадратная матрица.Получить одномерный массив,состоящий из средних...

Возможно ли, меняя элементы одномерного массива A, получить одномерный массив B.
В процедуре составить программу, проверяющую, можно ли, меняя элементы одномерного массива A, получить одномерный массив B.

Проверить, можно ли, меняя элементы одномерного массива A, получить одномерный массив B
Составьте программу, проверяющую, можно ли, меняя элементы одномерного массива A, получить одномерный массив B. пожалуйста помогите


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru