Форум программистов, компьютерный форум CyberForum.ru

Работа с изображением - C++

Восстановить пароль Регистрация
 
mago
Сообщений: n/a
11.12.2012, 02:07     Работа с изображением #1
Нужна подсказка о том, как попиксельно можно работать с изображением (псевдобинарным, т.е. каждый пиксель 255 и 0). Нужна возможность "бегать" по изображению, проверяя значения яркости пикселей, и в зависимости от этого выполнять какие-то функции или менять яркость на противоположную. Если не сложно, кусочек простейшего кода, который покажет, как возможно загружать изображение и как обращаться к пикселям.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fair7
8 / 8 / 0
Регистрация: 31.12.2010
Сообщений: 81
10.06.2014, 21:03     Работа с изображением #2
B Dev C++ тоже пойдёт, только нужно "доработать напильником".
Переведи рисунок в чёрно белый. Как переводить я не пробовал, можешь попробовать усреднить значение по цветам и с двинуть оператором ">>" чтобы осталось 8 бит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _WIN32_WINNT 0x0501
//#include "stdafx.h"
#include <windows.h>
#include <wincon.h>
 
int main()
{
    system("pause");
    HWND hWnd = GetConsoleWindow();
    HDC hDc = GetDC(hWnd);
    SetPixel(hDc, 100, 100, 0x00ffff);
    for(int r=192;r-=8;)
        for(int x=600;x-=2;)
            for(int y=800;y-=8;)
            {
        SetPixel(hDc, x,y,RGB(255-r,x,y));
    }
    system("cls");
    system("pause");
    ReleaseDC(hWnd, hDc);
    return 0;   
}
Миниатюры
Работа с изображением  
fair7
8 / 8 / 0
Регистрация: 31.12.2010
Сообщений: 81
10.06.2014, 21:09     Работа с изображением #3
А если бинарный - ещё з двинь ">>" , чтобы осталось 1 бит.
если HEKOTOPOE4UC7O<<=7; то и будет, либо 0 либо 255.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
10.06.2014, 21:12     Работа с изображением #4
Проще через OpenCV. Инструкция здесь. Можно обращаться как к одноканальным, так и к многоканальным изображениям.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
10.06.2014, 21:20     Работа с изображением #5
Цитата Сообщение от fair7 Посмотреть сообщение
Как переводить я не пробовал, можешь попробовать усреднить значение по цветам и с двинуть оператором ">>" чтобы осталось 8 бит.
Формула перевода
Y=0.3R+0.59G+0.11B
fair7
8 / 8 / 0
Регистрация: 31.12.2010
Сообщений: 81
11.06.2014, 23:46     Работа с изображением #6
Прошу прощения за
Цитата Сообщение от fair7 Посмотреть сообщение
если HEKOTOPOE4UC7O<<=7; то и будет, либо 0 либо 255
будет 128 а не 255
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
12.06.2014, 07:12     Работа с изображением #7
Цитата Сообщение от fair7 Посмотреть сообщение
если HEKOTOPOE4UC7O<<=7; то и будет, либо 0 либо 255.
можно сделать из 1 255 несколькими способами
0-x
0-0=0
0-1=-1(0x1111 1111)

x=~x;
x+1;
~0=0x1111 11111
+1=0x0000 0000

~1= 0x1111 1110
+1= 0x1111 1111


x-1;
x=~x;

0-1=0x1111 1111
~ =0

1-1=0
~ 0x1111 1111
fair7
8 / 8 / 0
Регистрация: 31.12.2010
Сообщений: 81
12.06.2014, 21:15     Работа с изображением #8
А работающий пример можно, а то что-то не понятно
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
12.06.2014, 21:25     Работа с изображением #9
C
1
2
3
char ValPixel=1;
 
R=G=B=0-ValPixel;
fair7
8 / 8 / 0
Регистрация: 31.12.2010
Сообщений: 81
15.06.2014, 01:48     Работа с изображением #10
Да нет же, вот это не понятно:
Цитата Сообщение от ValeryS Посмотреть сообщение
можно сделать из 1 255 несколькими способами
0-x
0-0=0
0-1=-1(0x1111 1111)
x=~x;
x+1;
~0=0x1111 11111
+1=0x0000 0000
~1= 0x1111 1110
+1= 0x1111 1111
x-1;
x=~x;
0-1=0x1111 1111
~ =0
1-1=0
~ 0x1111 1111
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2014, 06:14     Работа с изображением
Еще ссылки по теме:

C++ Содержит ли текст слова, являющиеся изображением восьмеричных чисел
C++ Программа с изображением

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
15.06.2014, 06:14     Работа с изображением #11
что не понятно?
у тебя хранится где то изображение в виде массива элементы изображения 0 или 1
нужно когда выводишь изображение на экран было если 0 то RGB {0, 0, 0} b или если 1 то RGB{255,255,255}
я тебе показал как 0 и 1 сделать RGB
забыл самое очевидное
x*255

Добавлено через 4 минуты
А, кажется понял

Цитата Сообщение от ValeryS Посмотреть сообщение
x=~x;
x+1;
~0=0x1111 11111
+1=0x0000 0000
действительно из 0 никак не будет шестнадцатеричного 0x1111 11111
мой косяк
Я двоичное значение написал как шестнадцатеричное нужно читать так

x+1;
~0=1111 11111b
+1=0000 0000b
Yandex
Объявления
15.06.2014, 06:14     Работа с изображением
Ответ Создать тему
Опции темы

Текущее время: 01:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru