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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

Вырезка части изображения по двум точкам - C++

29.07.2013, 14:15. Просмотров 349. Ответов 0
Метки нет (Все метки)

Задача вырезать часть матрицы изображения по двум точкам(верхниму-левом и правому нижнему).
P.S. работаю c libtiff. тестирую в qt. Изображение 8bit'е
Функция вырезки
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
bool TiffFile::Read(const char *fileName, int x1, int y1, int x2, int y2)
{
    tif=TIFFOpen(fileName,"r");
    if(tif)
     {
        int compression=0;
        int planar=0;
        TIFFGetField(tif,TIFFTAG_COMPRESSION,&compression);
        TIFFGetField(tif,TIFFTAG_PLANARCONFIG,&planar);
        if((compression==1)&&(planar==PLANARCONFIG_CONTIG))
        {
            if(mat!=0)
            {
                delete[] mat;
                height=0;
                width=0;
                depth=0;
                channels=0;
            }
            TIFFGetField(tif,TIFFTAG_IMAGELENGTH,&height);
            TIFFGetField(tif,TIFFTAG_IMAGEWIDTH,&width);
            TIFFGetField(tif,TIFFTAG_BITSPERSAMPLE,&depth);
            TIFFGetField(tif,TIFFTAG_SAMPLESPERPIXEL,&channels);
            if((x1<width&&x1>=0)&&(x2<width&&x2>=0)&&(y1<height&&y1>=0)&&(y2<height&&y2>=0)&&(x2>x1)&&(y2>y1))
            {
                mat=new char[(x2-x1)*(y2-y1)*(depth/8)*channels];
                //cout<<"size of "<<(x2-x1)*(y2-y1)*(depth/8)*channels<<endl;
                char *line=new char[width*(depth/8)*channels];
                for(int i=y1;i<y2;i++)
                {
                    TIFFReadScanline(tif,line,i);
                    for(int j=x1;j<x2;j++)
                    {
                        mat[(i-y1)*(x2-x1)+j-x1]=line[j];
                    }
                }
                width=x2-x1;
                height=y2-y1;
                TIFFClose(tif);
                return true;
            }
            else
            {
                cout<<"Point not in the image area."<<endl;
                return false;
            }
        }
        else
        {
            cout<<"Sorry.Given type of image is not supported.Refer to Lukyanau Maxim"<<endl;
            return false;
        }
     }
     else
    {
         cout<<"Can not open image"<<endl;
         return false;
    }
}
Тестирование
C++ (Qt)
1
2
3
4
5
6
7
8
9
    QString fileName(QFileDialog::getOpenFileName(this,tr("Open files"),QDir::currentPath(),tr("MVR files (*.tiff;*.tif)")));
    TiffFile tiff;
    tiff.Read(fileName.toAscii(),0,0,99,99);
    QImage *img=new QImage((uchar*)(tiff.Matrix()),tiff.Widht(),tiff.Height(),QImage::Format_Indexed8);
    QVector<QRgb> colorTable;
    for (int i = 0; i < 256; i++)
        colorTable.push_back(QColor(i, i, i).rgb());
    img->setColorTable(colorTable);
    img->save("my2.png","PNG");
результаты при (0,0) (100,100)
результаты при (0,0) (99,99)
0
Изображения
  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 14:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вырезка части изображения по двум точкам (C++):

Уравнение прямой по двум точкам - C++
#include &lt;iostream&gt; using namespace std; void main() { setlocale (LC_ALL, &quot;rus&quot;); int x1, y1, x2, y2, x, y, line; cout &lt;&lt;...

Построить прямоугольник по двум заданным точкам - C++
Построить прямоугольник по двум заданным точкам: левому верхнему и правому нижнему углам. Обе точки указываются с клавиатуры, а именно:...

Регулярные выражения. Вырезка части строки. - PHP
Есть 2 такие строчки (2 элемента массива): read.php 82.179.74.218 ' write.php 82.179.74.218 ' Как мне получить в переменные...

Вырезка цифрк с изображения - Delphi
Я пытаюсь научиться распозновать капчи, довел капчу до этого вида далше не знаю как вырезать цыфарки, я бы вырезал по координатам...

Вырезка одного изображения из другого - Photoshop
Здравствуйте, Гуру Есть ,например, кольцо на прозрачном фоне, есть фон(например черный), как можно сделать чтоб в дырку кольца...

Линия по двум точкам - Delphi
Ребята, помогите пожалуйста!!! Нужно создать оси координат (икс и игрек) от -5 до 5 на каждой оси, и ввести с компьютера два числа (a и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 14:15
Привет! Вот еще темы с ответами:

Направление по двум точкам - C++ Builder
- Здравствуйте Все, Все после праздников! - Возникла задачка, скорее по математике: Есть плоскость. На ней Первая точка с...

Квадрат по двум точкам - C#
Необходимо построить максимальный квадрат по двум точкам без поворотов с неихменной первой тчокой., т.е. (для примера) точки a=(0,0) и...

Площадь прямоугольника по двум точкам. - Turbo Pascal
Фигуры. Одно из требований задачи - посчитать площадь фигур. Любая геометрическая фигура характеризуется точкой привязки и цветом. В...

Поворот треугольника по двум точкам в 3д - Геометрия
Если задан треугольник ABC в 3д. Задан 3 точками XYZ. Изменяем координаты двух точек A и B( изменяем координаты и угловую ориентацию...


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

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

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