Рубрики
Без рубрики

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

Что нам нужно начать работу с Opencv … нам нужно импортировать несколько библиотек, приведенных ниже … Теги с Python, Jupyter, Opencv.

Что нам нужно начать с Opencv …

Нам нужно импортировать несколько библиотек, приведенных ниже и доступны в Google Colab Независимые установки могут потребоваться для других платформ.

1 . Требуется импорт

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
import matplotlib.pyplot as plt
from google.colab.patches import cv2_imshow

2 . Далее мы импортируем изображение и получите его данные

mg = cv2.imread(r'/content/parrot.jpg',cv2.IMREAD_UNCHANGED)
height = img.shape[0]  
width = img.shape[1]  
channels = img.shape[2]  
size1 = img.size
cv2_imshow(img)
print('Image Height       : ',height)  
print('Image Width        : ',width)  
print('Number of Channels : ',channels)  
print('Image Size  :', size1)

Помните, что мы используем Colab, и она использует свои собственные фрагменты.

3 . Сначала давайте попробуем получить расстояние между двумя пикселями

pixel = img[100,100]
pixel1 = img[200,200]
pixel_diff= pixel1-pixel  
print("The difference between the two pixels is :",pixel_diff)  

4 . Далее давайте попробуем Point обработку в пространственной области на изображении, Изображение негативов и Закон силы (гамма) Преобразование Отказ

Отрицательный

print("Part A : Negative of the image")
plt.imshow(img)
plt.show()
# negative transformed image
color = ('b', 'g', 'r')    
plt.show()

Преобразование электроэнергии (гамма)

print("Part B : Power Law ")
img = cv2.imread('/content/parrot.jpg', cv2.IMREAD_UNCHANGED)
gamma_two_point_two = np.array(255*(img/255)**2.2,dtype='uint8')

# Similarly, Apply Gamma=0.4 
gamma_point_four = np.array(255*(img/255)**0.4,dtype='uint8')

# Display the images in subplots
img3 = cv2.hconcat([gamma_two_point_two,gamma_point_four])
cv2_imshow(img3)

Мы использовали HConcat для отображения результатов вместе.

5 . Давайте попробуем некоторую точку обработки в пространственном домене.

Контрастное растяжение

print("Part C : Gray-level slicing, Contrast stretching")
img = cv2.imread('/content/parrot.jpg', cv2.IMREAD_UNCHANGED)
def pixelVal(pix, r1, s1, r2, s2):
    if (0 <= pix and pix <= r1):
        return (s1 / r1)*pix
    elif (r1 < pix and pix <= r2):
        return ((s2 - s1)/(r2 - r1)) * (pix - r1) + s1
    else:
        return ((255 - s2)/(255 - r2)) * (pix - r2) + s2
r1 = 70
s1 = 0
r2 = 140
s2 = 255
pixelVal_vec = np.vectorize(pixelVal)

# Apply contrast stretching.
contrast_stretched = pixelVal_vec(img, r1, s1, r2, s2)

print("Constrat Strethcing :")
# Save edited image.
cv2_imshow(contrast_stretched)

Нарезка серого уровня

class pointProcessing:
 def slicedGreyScale(self,image):
 # T1 and T2 Represent Lower and Upper Threshold Value
  T1 = 100
  T2 = 200
  h, w, c = img.shape
  img_thresh_back = np.zeros((h,w), dtype=np.uint8)
  for i in range(h):
    for j in range(w):
      if (T1 < image[i,j] and image[i,j] < T2):
        img_thresh_back[i,j]= 255
      else:
        img_thresh_back[i,j]= image[i,j]
  cv2_imshow(img_thresh_back)
pointObj= pointProcessing()
pointObj.slicedGreyScale(img)

6. Ближайшая интерполяция и билинейная интерполяция.

Использование среднего значения соседа и Билинейный

#Nearest neighbor Interpolation Using cv2.resize()Python
near_img = cv2.resize(img,None, fx = 2, fy = 2, interpolation = cv2.INTER_NEAREST)
cv2_imshow(near_img)

# Bilinear Interpolation 
bilinear_img = cv2.resize(img,None, fx = .5, fy = .5, interpolation = cv2.INTER_LINEAR)
cv2_imshow(bilinear_img)

7. Давайте попробуем другие операции, доступные в OpenCV

  • Арифметические операции – добавление, разделение
  • Логические операции на двоичном изображении – XOR, НЕТ
  • Геометрические операции – вращение, аффинное перевод
  • Статистические операции – значит, дисперсия

Дополнение и Разделение

print("A : Addition and Division :")
img1 = cv2.imread('/content/parrot.jpg')
img2 = cv2.imread('/content/bg.jpg')
dst = cv2.addWeighted(img1,0.3,img2,0.7,0)
#Div
div = cv2.divide(img1, img2)
AddDiv = cv2.hconcat([dst,div])
cv2_imshow(AddDiv)

XOR и НЕТ

print("B : Xor and Not Operations :")
#XOR function
bitwiseXor = cv2.bitwise_xor(img1, img2)
#NOT function
bitwiseNot = cv2.bitwise_not(img1)
#concat
img5 = cv2.hconcat([bitwiseXor,bitwiseNot])
cv2_imshow(img5)

Вращение и Аффинного перевода

print("C : Geometric Operations :")
print("Rotation and Affine Translation :")
#Rotation
image = cv2.rotate(img1, cv2.cv2.ROTATE_90_CLOCKWISE)
cv2_imshow(image)
#Affine Translation
srcTri = np.array( [[0, 0], [img1.shape[1] - 1, 0], [0, img1.shape[0] - 1]] ).astype(np.float32)
dstTri = np.array( [[0, img1.shape[1]*0.33], [img1.shape[1]*0.85, img1.shape[0]*0.25], [img1.shape[1]*0.15, img1.shape[0]*0.7]] ).astype(np.float32)
warp_mat = cv2.getAffineTransform(srcTri, dstTri)
warp_dst = cv2.warpAffine(img1, warp_mat, (img1.shape[1], img1.shape[0]))
# Rotating the image after Warp
center = (warp_dst.shape[1]//2, warp_dst.shape[0]//2)
angle = -50
scale = 0.6
rot_mat = cv2.getRotationMatrix2D( center, angle, scale )
warp_rotate_dst = cv2.warpAffine(warp_dst, rot_mat, (warp_dst.shape[1], warp_dst.shape[0]))
cv2_imshow(warp_dst)

Среднее и Дисперсия

print("D : Mean, Variance :")
#Mean of img1 and img2 
img7 = (img1+img2) * 0.5;
cv2_imshow(img7)
#Variance

Интерполяция изображений : Вниз от выборки

print("E : Image interpolation : Down Sampling")
ds = cv2.pyrDown(img1)
cv2_imshow(ds)

На данный момент мы охватывали основы OpenCV

Оригинал: “https://dev.to/alcatraz714/opencv-image-processing-using-python-6ma”