Как найти размеры сканируемого изображения

Иногда может возникнуть необходимость узнать разрешение какой-нибудь картинки или фотографии. Чаще всего она возникает, когда вы хотите распечатать изображение. Измеряется оно в точках на дюйм (dpi) или в пикселях на дюйм (ppi). То есть, чем больше точек в одном дюйме, тем четче и качественней получится напечатанное изображение.

В данной статье я покажу, как узнать разрешение картинки стандартными средствами операционной системы, в Фотошопе или программе FastStone Image Viewer. Также покажу, как рассчитать разрешение в dpi для отсканированных страниц pdf файла.

Через Свойства

Самый простой способ, при котором ничего устанавливать не нужно – это посмотреть необходимое нам значение в окне «Свойства». Давайте расскажу, как можно его открыть в различных операционных системах.

В Windows XP

Если у вас установлена Windows XP, тогда нажимайте правой кнопкой по снимку или картинке и выбирайте из выпадающего списка пункт «Свойства».

Контекстное меню

Затем переходите на вкладку «Сводка» и жмите на кнопку «Дополнительно».

Кнопка Дополнительно

После этого у вас отобразится число точек (пикселей) по высоте и ширине, а также разрешение в пикселях на дюйм.

Просмотр дополнительной информации

В Windows 7, 8, 10

Для тех, у кого установлена Windows 7 или новее, будет отличаться название вкладки. Покажу все действия в «десятке». Правой кнопкой мышки кликайте по фотографии, и переходите в «Свойства».

Открытие окна Свойства

Открывайте вкладку «Подробно» и ищите строчки с информацией о горизонтальном и вертикальном расширении.

Вкладка Подробно

Используя Photoshop

Если вам нужно не просто узнать разрешение изображения, а изменить это значение, тогда можно воспользоваться программой Фотошоп.

Открывайте свою картинку или фото в утилите – нажмите Ctrl+O и ищите ее через Проводник. Дальше воспользуйтесь сочетанием клавиш Ctrl+Alt+I, чтобы открыть окно «Размер изображения» («Image Size»). В нем вы увидите всю исчерпывающую информацию. Обратите внимание на строку «Разрешение» («Resolution»). В ней вы можете установить другое значение.

Размер картинки

Вот так выглядит представленное выше окно на русском языке. Обращайте внимание на выставленные единицы измерения. Это могут быть пикс/дюйм или сантиметры/дюйм.

Окно в Фотошопе на русском языке

С помощью просмотрщика изображений

Не все захотят устанавливать Фотошоп, поэтому, если его у вас нет, можете воспользоваться бесплатной программой для просмотра изображений FastStone Image Viewer. В ней также получится узнать разрешение картинки в dpi. Перейдите по ссылке выше и скачайте программу.

Сначала нужно открыть фотографию в утилите. Для этого нажмите Ctrl+O и найдите ее на компьютере. Когда она откроется, перейдите на вкладку «Правка» и из выпадающего списка выберите «Изменить размер». Или используйте комбинацию Ctrl+R.

Вкладка Правка

В открывшемся окошке отобразится информация об исходном размере снимка и его разрешение. Здесь можно изменить все предложенные значения.

Окно Изменение размера

Для pdf страниц

Может быть и так, что к вам в руки попали отсканированные страницы, сохраненные в pdf файле. Узнать разрешение в dpi для таких изображений можно с помощью сторонних утилит и специальных дополнений для Adobe Reader. Но я покажу вам другой способ. Для него вам потребуется только программа Adobe Acrobat Reader и калькулятор.

Итак, открывайте pdf документ с отсканированными, принтскиненными или сфотографированными страницами, в упомянутой программе. Переходите на вкладку «Файл» и выбирайте пункт «Свойства».

Вкладка Файл

Затем на вкладке «Описание» посмотрите значения, которые указаны в строке «Размер страницы». Они там могут быть в см, мм или дюймах. Нам нужно, чтобы размер страницы был в дюймах. В примере он в миллиметрах, так что нужно перевести значения в дюймы.

Для перевода используем следующие данные: 1 мм = 0,039 дюйма, 1 см = 0,39 дюйма. Расчет в примере выглядит следующим образом: 369,4*0,039=14,4066 и 206,7*0,039=8,0613. Если у вас размер страницы был в сантиметрах, то умножайте на 0,39. Получилось следующее: 369,4х206,7 мм – это 14,4066х8,0613 дюймов.

Размер страницы в дюймах

Теперь нам нужно открыть наш pdf файл в блокноте. Кликайте по нему правой кнопкой, выбирайте «Открыть с помощью», и кликайте по строчке «Блокнот». Если Блокнота нет в списке предлагаемых приложений, то нажимайте «Выбрать другое приложение» и ищите его в полном списке.

Открытие файла через Блокнот

Дальше нам нужно отыскать значение ширины. Комбинацией Ctrl+F открывайте окно «Найти» и в строку печатайте «width». Нажимайте «Найти далее» и в тексте подсветится искомое слово. В примере ширина 1047 пикселей.

Значение ширины

Повторите все те же действия, только со словом «height». Высота моего изображения 586 пикселей.

Значение высоты

В результате, у нас есть следующие данные: 14,4066х8,0613 дюймов – размер документа для печати, 1047х586 пикселей – размер изображения в пикселях. Из них можно рассчитать разрешение картинки в dpi:

1047/14,4066 = 72,6750

586/8,0613 = 72,6930

У меня разрешение изображения 72 dpi.

Выбирайте любой способ и смотрите, какое разрешение у вашей картинки. Для этих целей можно установить одну из рассмотренных программ или воспользоваться стандартным окном свойств. Также, используйте представленный расчет, чтобы получить нужную информацию для pdf страниц.

Смотрим видео по теме:


Загрузка…

Об авторе: Олег Каминский

Вебмастер. Высшее образование по специальности «Защита информации». Создатель портала comp-profi.com. Автор большинства статей и уроков компьютерной грамотности



Задание 158. Сканируется цветное несжатое изображение размером 10 х 15 см2. Разрешающая способность сканера — 600 х 600 dpi, глубина цвета — 3 байта. Какой информационный объём будет иметь полученный графический файл?


10 см примерно равна 4 дюймам.
15 см примерно равна 6 дюймам
Условные обозначения:

I — информационный объём графического файла;
i — глубина цвета, где 3 байта = 24 бита;
K — количество пикселей в изображении, перемножаем разрешение картинки (оно у нас 4х6 дюйма) на разрешающую способность сканера.

Сканируется цветное несжатое изображение размером 10 х 15 см2

Это перевод из статьи в технологическом блоге pyimagesearch «Измерение размеров объектов в изображении с помощью OpenCV», автор оригинала: Адриан Роузброк.
URL:https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv/

Используйте OpenCV для измерения размера объектов на изображении

Определение размера цели изображения аналогично вычислению расстояния от нашей камеры до объекта — в обоих случаях нам необходимо заранее определить соотношение, чтобы измерить количество пикселей (pix_per_metric) для каждой данной единицы измерения. Упомянутый здесь индикатор отношения с именем «пиксель_пер_метрический» более формально определен в следующем разделе.

pixels_per_metric

Чтобы определить размер объекта на изображении, нам сначала нужно использовать опорный объект в качестве точки «калибровки». Наш ссылочный объект должен иметь два важных атрибута:

  1. Мы должны знать истинный размер этого объекта (эквивалентный размер в миллиметрах или дюймах по ширине или высоте).
  2. Мы должны быть в состоянии легко найти этот эталонный объект на изображении, либо на основе позиции эталонного объекта (например, эталонный объект может быть объектом в верхнем левом углу изображения), либо на основе внешнего вида эталонного объекта (например, эталонный объект может быть на картинке Самый уникальный цвет или уникальная форма отличается от всех других объектов).
    В любом случае наша ссылка должна быть однозначно идентифицируемой.

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

Рисунок 1. Мы будем использовать центовую монету в качестве ориентира и обеспечим, чтобы она всегда находилась в крайнем левом положении изображения, что позволяет нам дополнительно сортировать по размеру контура их положения ХОРОШО.

Убедившись, что центовая монета является самым левым объектом, мы можем расположить область контура нашего объекта слева направо и захватить эту монету (она всегда будет соответствовать первой области контура в отсортированном списке) , И использовать его, чтобы определить соотношение пикселей_per_metric, мы определяем его как:

pix_per_metric = ширина пикселя объекта / реальная ширина объекта

Истинная ширина центовой монеты составляет 0,955 дюйма. Теперь предположим, что монета в нашем изображении имеет ширину 150 пикселей (в зависимости от связанной с ней ограничительной рамки). Тогда в этом случае pix_per_metric вычисляется так:

pixels_per_metric = 150px / 0.955in = 157px

Поэтому на нашем изображении около 157 пикселей на дюйм. С помощью этого соотношения мы можем рассчитать размер других объектов на изображении.

Используйте компьютерное зрение для измерения размера объекта

Теперь, когда мы поняли pix_per_metric, мы можем реализовать программный скрипт Python для измерения размера объектов в изображении.
Откройте новый файл py и вставьте следующий код:

# import the necessary packages
from scipy.spatial import distance as dist
from imutils import perspective
from imutils import contours
import numpy as np
import argparse
import imutils
import cv2

def midpoint(ptA, ptB):
    return ((ptA[0] + ptB[0]) * 0.5, (ptA[1] + ptB[1]) * 0.5)

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
    help="path to the input image")
ap.add_argument("-w", "--width", type=float, required=True,
    help="width of the left-most object in the image (in inches)")
args = vars(ap.parse_args())

Строки 2-8 используются для импорта необходимых нам пакетов Python. В этом примере мы будем интенсивно использовать пакет imutils, поэтому, если вы его не устанавливаете, обязательно установите его перед использованием:

$ pip install imutils

Кроме того, если вы уже установили этот пакет imutils, убедитесь, что это последняя версия (последняя версия — 0.3.6).

$ pip install --upgrade imutils

Строки 10 и 11 определяют функцию средней точки, которая, как следует из названия, используется для вычисления средней точки между двумя (x, y) координатами.

Затем мы анализируем параметры нашей командной строки в строках 14-19. Нам нужны два параметра, —image, который является путем к нашему входному изображению, которое содержит объект, который мы хотим измерить, —width, который является шириной нашего эталонного объекта (в дюймах), идентифицированного на изображении пути —image Самый левый объект.

Теперь мы можем загрузить наше изображение и предварительно обработать его:

# load the image, convert it to grayscale, and blur it slightly
image = cv2.imread("F:pyexample_03.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)

# perform edge detection, then perform a dilation + erosion to
# close gaps in between object edges
edged = cv2.Canny(gray, 50, 100)
edged = cv2.dilate(edged, None, iterations=1)
edged = cv2.erode(edged, None, iterations=1)

# find contours in the edge map
cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

# sort the contours from left-to-right and initialize the
# 'pixels per metric' calibration variable
(cnts, _) = contours.sort_contours(cnts)
pixelsPerMetric = None

Строки 2-4 загружают наше изображение с диска, преобразуют его в градации серого, а затем сглаживают, используя фильтр Гаусса. Затем мы выполняем обнаружение ребер и расширение + сглаживание, чтобы устранить любые разрывы между ребрами на карте ребер (строки 8-10).

Линии 13-15 находят линию контура, которая является соответствующей линией контура объекта в нашей карте краев.

Затем области контуров располагаются в строке 19 слева направо (чтобы мы могли извлечь эталонный объект). Затем мы инициализируем значение пикселяPerMetric в строке 20.

Следующим шагом является проверка и проверка значения каждой области контура.

# loop over the contours individually
for c in cnts:
    # if the contour is not sufficiently large, ignore it
    if cv2.contourArea(c) < 100:
        continue

    # compute the rotated bounding box of the contour
    orig = image.copy()
    box = cv2.minAreaRect(c)
    box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)
    box = np.array(box, dtype="int")

    # order the points in the contour such that they appear
    # in top-left, top-right, bottom-right, and bottom-left
    # order, then draw the outline of the rotated bounding
    # box
    box = perspective.order_points(box)
    cv2.drawContours(orig, [box.astype("int")], -1, (0, 255, 0), 2)

    # loop over the original points and draw them
    for (x, y) in box:
        cv2.circle(orig, (int(x), int(y)), 5, (0, 0, 255), -1)

В строке 2 мы начинаем цикл по каждому отдельному значению контура. Если область контура недостаточно велика, мы отбрасываем эту область и считаем ее шумом, оставшимся от процесса обнаружения края (строки 4 и 5).

Если площадь контура достаточно велика, мы вычислим ограничивающий угол поворота изображения в строках 9-11. Обратите особое внимание: функция cv2.cv.BoxPoints предназначена для версии opencv2.4, а функция cv2.BoxPoints — для OpenCV 3 версии.

Затем мы располагаем повернутые координаты ограничивающего прямоугольника по порядку в верхнем левом углу, верхнем правом углу, нижнем правом углу и нижнем левом углу, как обсуждалось в блоге на прошлой неделе (строка 17).

Наконец, линии 18-22 обводят объект зеленым цветом, а затем рисуют вершины прямоугольника ограничительной рамки в маленьких красных кружках. Теперь, когда у нас есть ограничивающий прямоугольник, мы можем вычислить ряд средних точек:

    # unpack the ordered bounding box, then compute the midpoint
    # between the top-left and top-right coordinates, followed by
    # the midpoint between bottom-left and bottom-right coordinates
    (tl, tr, br, bl) = box
    (tltrX, tltrY) = midpoint(tl, tr)
    (blbrX, blbrY) = midpoint(bl, br)

    # compute the midpoint between the top-left and top-right points,
    # followed by the midpoint between the top-righ and bottom-right
    (tlblX, tlblY) = midpoint(tl, bl)
    (trbrX, trbrY) = midpoint(tr, br)

    # draw the midpoints on the image
    cv2.circle(orig, (int(tltrX), int(tltrY)), 5, (255, 0, 0), -1)
    cv2.circle(orig, (int(blbrX), int(blbrY)), 5, (255, 0, 0), -1)
    cv2.circle(orig, (int(tlblX), int(tlblY)), 5, (255, 0, 0), -1)
    cv2.circle(orig, (int(trbrX), int(trbrY)), 5, (255, 0, 0), -1)

    # draw lines between the midpoints
    cv2.line(orig, (int(tltrX), int(tltrY)), (int(blbrX), int(blbrY)),
        (255, 0, 255), 2)
    cv2.line(orig, (int(tlblX), int(tlblY)), (int(trbrX), int(trbrY)),
        (255, 0, 255), 2)

Строки 4-6 разделяют значения упорядоченного ограничивающего прямоугольника, который мы получили ранее, а затем вычисляем среднюю точку между верхним левым и верхним правым углами, а затем вычисляем среднюю точку между нижним левым и нижним правым углами.

Кроме того, мы также вычисляем среднюю точку верхнего левого угла и нижнего левого угла, верхнего правого угла и нижнего правого угла (строки 10 и 11).

Линии 14-17 рисуют синюю среднюю точку на нашем изображении, а затем соединяют средние точки фиолетовыми линиями.

Далее нам нужно инициализировать переменную pixPerMetric, посмотрев на наш ссылочный объект:

    # compute the Euclidean distance between the midpoints
    dA = dist.euclidean((tltrX, tltrY), (blbrX, blbrY))
    dB = dist.euclidean((tlblX, tlblY), (trbrX, trbrY))

    # if the pixels per metric has not been initialized, then
    # compute it as the ratio of pixels to supplied metric
    # (in this case, inches)
    if pixelsPerMetric is None:
        pixelsPerMetric = dB / args["width"]

Сначала рассчитаем евклидово расстояние между множеством промежуточных точек (линии 2 и 3).
Переменная dA будет содержать высоту расстояния (в пикселях), в то время как дБ будет поддерживать нашу ширину расстояния.

Затем мы проверяем в строке 8, была ли инициализирована наша переменная пиксельPerMetric, а если нет, то мы разделим дБ на ширину, которую мы предоставляем, чтобы получить (приблизительные) пиксели на дюйм.

Теперь, когда мы определили переменную pixPerMetric, мы можем измерить размер каждого объекта в изображении:

    # compute the size of the object
    dimA = dA / pixelsPerMetric
    dimB = dB / pixelsPerMetric

    # draw the object sizes on the image
    cv2.putText(orig, "{:.1f}in".format(dimA),
        (int(tltrX - 15), int(tltrY - 10)), cv2.FONT_HERSHEY_SIMPLEX,
        0.65, (255, 255, 255), 2)
    cv2.putText(orig, "{:.1f}in".format(dimB),
        (int(trbrX + 10), int(trbrY)), cv2.FONT_HERSHEY_SIMPLEX,
        0.65, (255, 255, 255), 2)

    # show the output image
    cv2.imshow("Image", orig)
    cv2.waitKey(0)

Строки 2 и 3 рассчитывают размер объекта (в дюймах) путем деления соответствующего евклидова расстояния на метрику пикселя в процентах (см. Выше раздел «pixs_per_metric» для получения дополнительной информации о том, как работает это соотношение). ). Строки 6-11 отображают размер объекта на нашем изображении, а строки 14 и 15 показывают результат.

Результаты испытаний размеров объекта

Чтобы протестировать наш скрипт size.py, просто выполните следующую команду:

 python size.py --image images/example_01.jpg --width 0.955

Ваш вывод должен выглядеть как на картинке ниже:

Рисунок 2. Использование OpenCV, Python и технологии машинного зрения + обработки изображений для измерения размера объектов на изображении

Как видите, мы успешно рассчитали размер каждого объекта на нашем изображении — наша визитная карточка правильно указана как 3,5 дюйма х 2 дюйма. Точно так же наши никелевые монеты точно описаны как 0.8in x 0.8in. Однако не все результаты идеальны. Сообщается, что патроны двух игровых мальчиков имеют немного разные размеры (фактически, они одинакового размера). Размер двух никелевых монет также упал на 0,1 дюйма. Почему это так? Почему измерения объектов не на 100% точны?

Есть две причины:
Сначала я поспешно сделал эту фотографию на своем iPhone. Этот угол, безусловно, не является идеальным углом 90 градусов «смотреть вниз» (как глаза птицы) на объект. Без идеального 90-градусного обзора (или как можно ближе к нему) размер объекта будет искажен.

   Во-вторых, я не использовал внутренние и внешние параметры камеры для калибровки моего iPhone. Если эти параметры являются неопределенными, фотография будет иметь тенденцию искажаться радиальными и тангенциальными линзами. Выполните дополнительный шаг калибровки, чтобы найти, что эти параметры могут «не искажать» наше изображение и привести к лучшей аппроксимации размера объекта (но я буду обсуждать коррекцию искажений как тему будущих сообщений в блоге).

Другими словами, при съемке объекта постарайтесь максимально приблизиться к углу обзора в 90 градусов — это поможет повысить точность оценки размера объекта.

Давайте рассмотрим второй пример измерения размера объекта. На этот раз измеряется размер планшета:

python size.py --image images/example_02.jpg --width 0.955


Рисунок 3: Использование OpenCV для измерения размера таблеток на изображении

В США почти половина лекарств, отпускаемых по рецепту, округлые и / или белые, поэтому, если мы сможем отфильтровать таблетки по результатам их измерений, у нас будет больше шансов для точной идентификации лекарств.

Наконец, у нас есть последний пример, на этот раз с использованием визитной карточки размером 3,5 на 2 дюйма для измерения размера двух виниловых пластинок и конверта:

Точно так же результат не идеален, но это связано с (1) углом обзора и (2) искажением объектива, как упомянуто в двух причинах для вышеупомянутого анализа.

Эта статья также относится к другому блогу, который переводит оригинальный английский блог, URL-адрес которого следующий:
https://blog.csdn.net/u010636181/article/details/80659700

Понравилась статья? Поделить с друзьями:
  • Как составить адрес факса
  • Стиральная машина скачет при отжиме как исправить самсунг
  • Рсв код ошибки 0400400013 как исправить
  • Как найти ивана степановича
  • Карточка не открыта не задан номер карточка не попадет в опись ф 0504033 как исправить