PCV Lab Codes
PCV Lab Codes
PCV Lab Codes
PRE-LAB:
1. What is computer vision?
2. Give some industrial applications of computer vision?
3. Why should we deal with images in computer vision?
4. What is Bayer color filter array?
IN LAB:
1. Perform a program for loading an image in an unchanged, color,
gray mode and display them until you press ‘a’ using OPENCV.
Also Write a code to save the three images using OPENCV?
2. Harry is applying to university so in that process he needs to
upload three types of certificates conditions given below. So, help
harry to do his task.
● Resize to specific width (450) and height (550)
● Resize only height (450)
● Downscale with resize ()
3. Implement a code to perform blending operation on two images
in which have 60% of image1 and 40% of image2.
POST LAB:
1. Danil wants to create an interactive Chatbot of color filter in
which it must perform the following operations and ask him to
save the produced image or not.
1 Hue
2 Saturation
3 HSV Image
4 Value
5 Green Channel
6 Doubled image
IN LAB ANSWERS:
1)import cv2
img = cv2.imread("lena.jpg",0)#grayscale
img1 = cv2.imread("lena.jpg",-1)#unchanged
img2= cv2.imread("lena.jpg",1)#color
print("press A to close the windows")
cv2.imshow("Hello World1",img)
cv2.imshow("Hello World2",img1)
cv2.imshow("Hello World3",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.1)
width = 550
height = 450
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.2)
import cv2
width = img.shape[1] # keep original width
height = 450
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.3)
import cv2
scale_percent = 60
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
3)
img1 = cv2.imread('ml.png') img2 = cv2.imread('opencv_logo.jpg')
dst = cv2.addWeighted(img1,0.6,img2,0.4,0)
cv2.imshow('dst',dst) cv2.waitKey(0) cv2.destroyAllWindows()
POST LAB:
1)
#Color Filter, Color Space
# Hue : 0 - 180, Saturation : 0 - 255, Value : 0 - 255
import cv2
img = cv2.imread('lena.jpg')
B,G,R = cv2.split(img)
img_HSV = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print("1","Hue")
print("2","Saturation")
print("3","HSV Image")
print("4","Value")
print("5","Green Channel")
print("6","Doubled image")
while(True):
print('enter the value')
b=int(input())
if(b==1):
cv2.imshow('Hue Channel ', img_HSV[:, :, 0])
cv2.waitKey(0)
cv2.destroyAllWindows()
elif(b==2):
cv2.imshow('Saturation ', img_HSV[:, :, 1])
cv2.waitKey(0)
cv2.destroyAllWindows()
elif(b==3):
cv2.imshow('HSV Image', img_HSV)
cv2.waitKey(0)
cv2.destroyAllWindows()
elif(b==4):
cv2.imshow('value ', img_HSV[:, :, 2])
cv2.waitKey(0)
cv2.destroyAllWindows()
elif(b==5):
cv2.imshow('Green Channel ', G)
cv2.waitKey(0)
cv2.destroyAllWindows()
elif(b==6):
larger = cv2.pyrUp(img)
cv2.imshow("doubled image",larger)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("Do you want to continue")
q=input()
if(q=='N' or q=='n'):
break
**********************************************************
2.3
import cv2
img1 = cv2.imread('C:\\Users\\SATISH VARMA\\Desktop\\m1.jpg')
img2 = cv2.imread('C:\\Users\\SATISH VARMA\\Desktop\\m2.jpg')
dst = cv2.addWeighted(img1,0.3,img2,0.4,0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
LAB-2
Color Image Processing Using OpenCV
PRE-LAB:
1. How is an RGB image represented? How many channels are
there in an RGB image? What are the ranges of pixel
intensities for each of these channels?
2. What are color-spaces ?
3. Describe the following color-spaces.
i) YCrCb Color Space
ii) HSV color space
iii) LAB color space
iv) CMYK color space
v) BGR Color Space
vi) Edge map of image
vii) Heat map of image
viii) Spectral Image map
IN-LAB:
Perform the following operations programmatically using OpenCV
and python:
2)
# Python program to read image
# as YCrCb color space
cv2.waitKey(0)
cv2.destroyAllWindows()
3)
# Python program to read image
# as HSV color space
cv2.waitKey(0)
cv2.destroyAllWindows()
4)
# Python program to read image
# as LAB color space
cv2.waitKey(0)
cv2.destroyAllWindows()
5)
# Python program to read image
# as EdgeMap
cv2.waitKey(0)
cv2.destroyAllWindows()
)
6)
7)
img = cv2.imread('g4g.png')
plt.imshow(img, cmap ='nipy_spectral')
POST-LAB SOLUTIONS:
import cv2
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
len(flags)
flags[40]
import matplotlib.pyplot as plt
import numpy as np
nemo = cv2.imread('./images/nemo0.jpg')
plt.imshow(nemo)
plt.show()
nemo = cv2.cvtColor(nemo, cv2.COLOR_BGR2RGB)
plt.imshow(nemo)
plt.show()
hsv_nemo = cv2.cvtColor(nemo, cv2.COLOR_RGB2HSV)
light_orange = (1, 190, 200)
dark_orange = (18, 255, 255)
mask = cv2.inRange(hsv_nemo, light_orange, dark_orange)
result = cv2.bitwise_and(nemo, nemo, mask=mask)
plt.subplot(1, 2, 1)
plt.imshow(mask, cmap="gray")
plt.subplot(1, 2, 2)
plt.imshow(result)
plt.show()
LAB 3
PRELAB:
1.Jessy once visited the cctv room of her college.Then she saw the Live Video Feed Capture of
her entire college and she also became interested in Live Video Feed from Camera.
so help her in implementing the following requirements
-Start a Live Video Feed Capture from Camera or Webcam
-Create two Windows Both should display The Live Video Feed from camera
--Window 1.It should be color Video
--Window 2.It should be gray Scale and upside down i.e inverted
- Also Both of these windows should display the Date and Current time
-Here the Live Feed should stop as soon as you enter a character 'q'
-Also save the Window 1 video as two ".avi" file.one file should be slow speed of video playback
-and other one should be high speed of video playback
POSTLAB:
Now Jessy wants to implement Live Video Feed Capture and create window which will zoomin
and zoomout the live video and also rotate(360 degrees) the window continuously
IN LAB:
import cv2
import datetime
font=cv2.FONT_HERSHEY_SIMPLEX
fourcc=cv2.VideoWriter_fourcc(*'XVID')
out=cv2.VideoWriter('output.avi',fourcc,50.0,(640,480))
out1=cv2.VideoWriter('output1.avi',fourcc,1.0,(640,480))
cap=cv2.VideoCapture(0)
while True:
ret,frame=cap.read()
datet=str(datetime.datetime.now()) # flip left-right
gray = cv2.flip(frame,0) # flip up-down
frame=cv2.putText(frame,datet,(10,50),font,1,(0,255,255),2,cv2.LINE_AA)
gray=cv2.putText(gray,datet,(10,50),font,1,(0,255,255),2,cv2.LINE_AA)
gray=cv2.cvtColor(gray,cv2.COLOR_BGR2GRAY)
cv2.imshow("LIVE VIDEO FEED COLOR",frame)
cv2.imshow("LIVE VIDEO FEED GRAY",gray)
out.write(frame)
out1.write(frame)
if cv2.waitKey(1) & 0xFF==ord('q'):
break
cap.release()
cv2.destroyAllWindows()
POST LAB:
import cv2
import time
def main():
windowName = "Live Video Feed"
cv2.namedWindow(windowName)
cap = cv2.VideoCapture(0)
if cap.isOpened():
ret, frame = cap.read()
else:
ret = False
while True:
if angle == 360:
angle = 0
#angle = 0
# if scale < 2:
# scale = scale + 0.1
#if scale >= 2:
# scale = 0.1
print(scale)
print(R)
cv2.imshow(windowName, output)
angle = angle + 1
time.sleep(0.01)
if cv2.waitKey(1) == ord('q'):
break
cv2.destroyWindow(windowName)
cv2.destroyAllWindows()
cap.release()
if __name__ == "__main__":
main()
LAB-4
PRE-LAB:
1. Explain the operations done in edge detection in detail?
2. Explain Region of Interest (ROI)?
3. How many types of edges in image and why should we detect?
4. When should we use ROI?
IN-LAB:
1. Kushal is taking an extra class for edge detection there he got a
work from his teacher to do all the task below. Kushal alone can’t
do so help him to complete his work
i. Load the image.
ii. Convert the image into grayscale.
iii. Apply the gaussian blur to the image.
iv. Now apply the edge detection algorithm for the image.
v. Then display the detected image.
2. Rurik and Kamal are friends Rurik want to crop an image and in
which the region of image should select by kamal and then rurik
want to show that selected region separated from original to
kamal. So help Rurik to do such work?
POST-LAB:
Charles is a portrait painting artist. He wants to replicate a picture so
he wants to know the total number of edges present in the picture.
Can you help him find the number of edges in the picture with the
help of edge detection.
INLAB:
import cv2
import numpy as np
def sketch(image):
img_gray_blur = cv2.GaussianBlur(img_gray,(5,5),0)
#Extract Edges
return mask
cap = cv2.VideoCapture(0)
while True:
if cv2.waitKey(1)==13:
break
cap.release()
cv2.destroyAllWindows()
2.import cv2
showCrosshair = False
fromCenter = False
im=cv2.imread(r"C:\Users\karthik\Desktop\IP\OpenCV-master\OpenCV-
master\lena.jpg")
r = cv2.selectROI(im)
imCrop = im[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])]
cv2.imshow("Image", imCrop)
cv2.waitKey(0)
import numpy as np
image = cv2.imread('kow.jpg')
cv2.waitKey(0)
# Grayscale
cv2.waitKey(0)
# Finding Contours
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.waitKey(0)
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
LAB 5
Image Denoising
PRELAB
1.Mention Type of thresholding Techniques?
2.Mention the role of gui in real world?
3.Why we use adaptive thresholding?
4.why we use otsu thresholding?
INLAB
Create a Graphical User Interface using Tkinter as given below and this interface must take an
image ‘.jpg or .png file’ and it should perform Thresholding and Adaptive Thresholding .so
create
Various buttons like BINARY,BINARY_INV,TOZERO,TOZERO_INV,TRUNC,MEAN_C and
GAUSSIAN_C.Here after pressing the button the algorithm must be implemented on the image
and give resultant image on the new window
POSTLAB
1. Jackson is a mathematician guy now he want to apply tricks on image like he want to
rotate the image along all angles continuously until we press ‘q’ button in key bord.So
help him to perform his task using OPENCV?
Inlab:
import tkinter as tk
def m(n):
a,b,c,d=127,255,11,2
if n==0:
ret,o=cv2.threshold(img,a,b,cv2.THRESH_BINARY)
cv2.imshow('Window1',o)
elif n==1:
ret,o=cv2.threshold(img,a,b,cv2.THRESH_BINARY_INV)
cv2.imshow('Window2',o)
elif n==2:
ret,o=cv2.threshold(img,a,b,cv2.THRESH_TOZERO)
cv2.imshow('Window3',o)
elif n==3:
ret,o=cv2.threshold(img,a,b,cv2.THRESH_BINARY_INV)
cv2.imshow('Window4',o)
elif n==4:
ret,o=cv2.threshold(img,a,b,cv2.THRESH_TRUNC)
cv2.imshow('Window5',o)
elif n==5:
th1=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINAR
Y,c,d)
cv2.imshow('Window6',th1)
elif n==6:
th2=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BI
NARY,c,d)
cv2.imshow('Window7',th2)
else:
print("sorry")
background_image = tk.PhotoImage(file='insta.png')
background_label = tk.Label(root, image=background_image)
background_label.place(relwidth=1, relheight=1)
frame = tk.Frame(root, bg='#000000', bd=5)
frame.place(relx=0.18, rely=0.23, relwidth=0.15, relheight=0.03, anchor='n')
label=tk.Label(frame,text="Normal Threshoulding", bg='#e62e00')
label.grid(row=0,column=1)
tk.Button(root,
text="BINARY",activebackground="green",bd=7,font=40,command=m(0)).place(x=100,y=220)
tk.Button(root,
text="BINARY_INV",activebackground="green",bd=7,font=40,command=m(1)).place(x=200,y=2
20)
tk.Button(root,
text="TOZERO",activebackground="green",bd=7,font=40,command=m(2)).place(x=350,y=220)
tk.Button(root,
text="BINARY_INV",activebackground="green",bd=7,font=40,command=m(3)).place(x=450,y=2
20)
tk.Button(root,
text="TRUNC",activebackground="green",bd=7,font=40,command=m(4)).place(x=600,y=220)
root.mainloop()
POST LAB:
import cv2
angle=0
scale = 1.0
# Perform the counter clockwise rotation holding at the center
while True:
if angle==360:
angle=90
else:
angle=angle+90
cv2.imshow('Original Image',img)
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated90 = cv2.warpAffine(img, M, (h, w))
cv2.imshow('Original Image',rotated90)
if cv2.waitKey(100) & 0XFF==ord('q'):
break
cv2.destroyAllWindows()
LAB6
PRELAB
INLAB
Image denoising:
Harsha took pictures on his trip to mumbai in which few pictures were blurred, he wants to
unblur the pictures using image denoising ,Guys can you help harsha in implementing image
denoising.
Harsha has four types of pictures.they are
(i) Grayscale image
(ii)Colour image
(iii)Grayscale image captured in a short period of time(use video capturing and take first 5
frames)
(iv)Colour image captured in a short period of time(use video capturing and take first 5
frames)
POSTLAB
Matlab:
IN LAB ANSWER:
Gray Scale:
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('die.png')
dst = cv.fastNlMeansDenoising(img,None,10,10,7,21)
plt.subplot(121),plt.imshow(img)
plt.subplot(122),plt.imshow(dst)
plt.show()
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('die.png')
dst = cv.fastNlMeansDenoisingColored(img,None,10,10,7,21)
plt.subplot(121),plt.imshow(img)
plt.subplot(122),plt.imshow(dst)
plt.show()
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
cap = cv.VideoCapture('vtest.avi')
# create a list of first 5 frames
img = [cap.read()[1] for i in xrange(5)]
# convert all to grayscale
gray = [cv.cvtColor(i, cv.COLOR_BGR2GRAY) for i in img]
# convert all to float64
gray = [np.float64(i) for i in gray]
# create a noise of variance 25
noise = np.random.randn(*gray[1].shape)*10
# Add this noise to images
noisy = [i+noise for i in gray]
# Convert back to uint8
noisy = [np.uint8(np.clip(i,0,255)) for i in noisy]
# Denoise 3rd frame considering all the 5 frames
dst = cv.fastNlMeansDenoisingMulti(noisy, 2, 5, None, 4, 7, 35)
plt.subplot(131),plt.imshow(gray[2],'gray')
plt.subplot(132),plt.imshow(noisy[2],'gray')
plt.subplot(133),plt.imshow(dst,'gray')
plt.show()
IN LAB:
Solve the following questions programatically using opencv and
python.
1. Apply histogram equalization using the equalizeHist function.
2. Solve the problem of over-brightness using the adaptive
histogram equalization by using the OpenCV CLAHE method.
3. Plot the histogram of the original image, the histogram of the
histogram-equalized image using the equalizehist function, and
the histogram of the image after applying the CLAHE method.
POST-LAB:
1. Discuss at least two differences between the equalizeHist
method and the CLAHE method of histogram equalization.
2. Analyze the three histograms in question 3 and discuss the
differences between them.
3. Explain why the differences occur in postlab question 2.
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('rubix.jpg',-1)
#plt.imshow(img)
print(img.shape,img.shape[0]*img.shape[1])
cv2.imshow('abc',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imshow('red',img[:,:,0])
cv2.waitKey(0)
cv2.destroyAllWindows()
print(img)
color = ('r','g','b')
for i,val in enumerate(color):
hist = cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(hist,color = val)
plt.show()
import numpy as np
k = np.ones((5,5),np.float32)/25
k
n = cv2.filter2D(img,-1,k)
img = cv2.cvtColor(n,cv2.COLOR_BGR2GRAY)
cv2.imshow('abc',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ))
cv2.imshow('abc',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(cv2.cvtColor(img, cv2.COLOR_GRAY2RGB))
plt.show()
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.plot(hist,color = val)
plt.show()
plt.imshow(cv2.cvtColor(equ, cv2.COLOR_GRAY2RGB))
plt.show()
hist = cv2.calcHist([equ],[0],None,[256],[0,256])
plt.plot(hist,color = val)
plt.show()
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)
plt.imshow(cv2.cvtColor(cl1, cv2.COLOR_GRAY2RGB))
plt.show()
hist = cv2.calcHist([equ],[0],None,[256],[0,256])
plt.plot(hist,color = val)
plt.show()
LAB 8
PRE LAB:
IN LAB:
kishore and varun are students of K L University they were willing to implement masking
technique that is to detect the blue color object using Webcam.help kishore and varun to
implement image masking?
POST LAB:
Image segmentation:
INLAB:
import cv2
import numpy as np
def main():
cap = cv2.VideoCapture(0)
if cap.isOpened():
ret, frame = cap.read()
else:
ret = False
while ret:
# Blue Color
low = np.array([100, 50, 50])
high = np.array([140, 255, 255])
# Green Color
# low = np.array([40, 50, 50])
# high = np.array([80, 255, 255])
# Red Color
#low = np.array([140, 150, 0])
#high = np.array([180, 255, 255])
cv2.destroyAllWindows()
cap.release()
if __name__ == "__main__":
main()
POST LAB:(Watershed Algorithm)
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('coins.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
# noise removal
kernel = np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)
4.Write the formula for Euclidean distance for two RGB colors?
In Lab:
Two Best Friends Named Ramesh and Rajesh where Thinking to Reduce the number of colors in
an image but they were not familiar with that ,Help these best friends to Implement the Color
Quantization With OPENCV Using K means clustering algorithm for the given image where K
value is 3?
Post Lab:
The two friends were satisfied for the Color Quantization which you had performed but they had
doubt regarding how do it really happened prove them by doing this manually
Inlab:
import numpy as np
import cv2
img = cv2.imread('home.jpg')
Z = img.reshape((-1,3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K=8
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((img.shape))
cv2.imshow('res2',res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
Post Lab:
From the referenece:
https://medium.com/consonance/k-means-and-image-quantization-part-2-be0a62c50c11
LAB-10
PRE-LAB:
1. What are morphological transformations?
2. Explain the following morphological operations
i) Erosion
ii) Dilation
iii) Opening
iv) Closing
v) Morphological gradient
IN-LAB:
Perform the following morphological operations
programatically using python and opencv:
i) Erosion
ii) Dilation
iii) Opening
iv) Closing
v) Morphological gradient
vi) Top Hat
vii) Black Hat
POST-LAB
1. Plot the histogram of each morphed image (7 morphological
operations) in the in-lab activity.
2. Explain the differences between these histograms.
3. State the applications of these morphological operations
IN lab
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('j.png',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv.erode(img,kernel,iterations = 1)
plt.imshow(erosion,cmap='binary')
plt.show()
hist = cv.calcHist([erosion],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
dilation = cv.dilate(img,kernel,iterations = 1)
plt.imshow(dilation,cmap='binary')
plt.show()
hist = cv.calcHist([dilation],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
plt.imshow(opening,cmap='binary')
plt.show()
hist = cv.calcHist([opening],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
plt.imshow(closing,cmap='binary')
plt.show()
hist = cv.calcHist([closing],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)
plt.imshow(gradient,cmap='binary')
plt.show()
hist = cv.calcHist([gradient],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
plt.imshow(tophat,cmap='binary')
plt.show()
hist = cv.calcHist([tophat],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)
plt.imshow(blackhat,cmap='binary')
plt.show()
hist = cv.calcHist([blackhat],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
LAB-11
PRE-LAB:
IN-LAB:
1. Choose any blurred image and perform deblurring and image
restoration by applying the Weiner filtering using opencv and
python.
2. Apply deblurring using the Lucy-Richardson technique in
opencv and python.
POST-LAB:
1. Plot the histogram of the original and the deblurred image
using each of the two techniques.
2. Analyze and discuss the differences between the histogram
plots obtained in post-lab 1.
#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
using namespace cv;
using namespace std;
void help();
void calcPSF(Mat& outputImg, Size filterSize, int R);
void fftshift(const Mat& inputImg, Mat& outputImg);
void filter2DFreq(const Mat& inputImg, Mat& outputImg, const Mat&
H);
void calcWnrFilter(const Mat& input_h_PSF, Mat& output_G, double
nsr);
const String keys =
"{help h usage ? | | print this message }"
"{image |original.JPG | input image name }"
"{R |53 | radius }"
"{SNR |5200 | signal to noise ratio}"
;
int main(int argc, char *argv[])
{
help();
CommandLineParser parser(argc, argv, keys);
if (parser.has("help"))
{
parser.printMessage();
return 0;
}
int R = parser.get<int>("R");
int snr = parser.get<int>("SNR");
string strInFileName = parser.get<String>("image");
if (!parser.check())
{
parser.printErrors();
return 0;
}
Mat imgIn;
imgIn = imread(strInFileName, IMREAD_GRAYSCALE);
if (imgIn.empty()) //check whether the image is loaded or not
{
cout << "ERROR : Image cannot be loaded..!!" << endl;
return -1;
}
Mat imgOut;
// it needs to process even image only
Rect roi = Rect(0, 0, imgIn.cols & -2, imgIn.rows & -2);
//Hw calculation (start)
Mat Hw, h;
calcPSF(h, roi.size(), R);
calcWnrFilter(h, Hw, 1.0 / double(snr));
//Hw calculation (stop)
// filtering (start)
filter2DFreq(imgIn(roi), imgOut, Hw);
// filtering (stop)
imgOut.convertTo(imgOut, CV_8U);
normalize(imgOut, imgOut, 0, 255, NORM_MINMAX);
imwrite("result.jpg", imgOut);
return 0;
}
void help()
{
cout << "2018-07-12" << endl;
cout << "DeBlur_v8" << endl;
cout << "You will learn how to recover an out-of-focus image by
Wiener filter" << endl;
}
void calcPSF(Mat& outputImg, Size filterSize, int R)
{
Mat h(filterSize, CV_32F, Scalar(0));
Point point(filterSize.width / 2, filterSize.height / 2);
circle(h, point, R, 255, -1, 8);
Scalar summa = sum(h);
outputImg = h / summa[0];
}
void fftshift(const Mat& inputImg, Mat& outputImg)
{
outputImg = inputImg.clone();
int cx = outputImg.cols / 2;
int cy = outputImg.rows / 2;
Mat q0(outputImg, Rect(0, 0, cx, cy));
Mat q1(outputImg, Rect(cx, 0, cx, cy));
Mat q2(outputImg, Rect(0, cy, cx, cy));
Mat q3(outputImg, Rect(cx, cy, cx, cy));
Mat tmp;
q0.copyTo(tmp);
q3.copyTo(q0);
tmp.copyTo(q3);
q1.copyTo(tmp);
q2.copyTo(q1);
tmp.copyTo(q2);
}
void filter2DFreq(const Mat& inputImg, Mat& outputImg, const Mat& H)
{
Mat planes[2] = { Mat_<float>(inputImg.clone()),
Mat::zeros(inputImg.size(), CV_32F) };
Mat complexI;
merge(planes, 2, complexI);
dft(complexI, complexI, DFT_SCALE);
Mat planesH[2] = { Mat_<float>(H.clone()), Mat::zeros(H.size(),
CV_32F) };
Mat complexH;
merge(planesH, 2, complexH);
Mat complexIH;
mulSpectrums(complexI, complexH, complexIH, 0);
idft(complexIH, complexIH);
split(complexIH, planes);
outputImg = planes[0];
}
void calcWnrFilter(const Mat& input_h_PSF, Mat& output_G, double
nsr)
{
Mat h_PSF_shifted;
fftshift(input_h_PSF, h_PSF_shifted);
Mat planes[2] = { Mat_<float>(h_PSF_shifted.clone()),
Mat::zeros(h_PSF_shifted.size(), CV_32F) };
Mat complexI;
merge(planes, 2, complexI);
dft(complexI, complexI);
split(complexI, planes);
Mat denom;
pow(abs(planes[0]), 2, denom);
denom += nsr;
divide(planes[0], denom, output_G);
}
2. Perform DFT on blur kernel. Also perform inverse DFT to get back original
contents. Make sure that the line for performing the inverse is commented
out as it overwrites the DFT array.
3. Multiply the DFT of image with the complex conjugate of the DFT of the blur
kernel
// Multiply numerator with complex conjugate
dft_C = cvCreateMat( dft_M1, dft_N1, CV_64FC2 );
4. Compute A**2 + B**2
// Split Real and imaginary parts
cvSplit( dft_B, image_ReB, image_ImB, 0, 0 );
cvPow( image_ReB, image_ReB, 2.0);
cvPow( image_ImB, image_ImB, 2.0);
cvAdd(image_ReB, image_ImB, image_ReB,0);
5. Divide numerator with A**2 + B**2
//Divide Numerator/A^2 + B^2
cvDiv(image_ReC, image_ReB, image_ReC, 1.0);
cvDiv(image_ImC, image_ReB, image_ImC, 1.0);
6.Merge real and imaginary parts
// Merge Real and complex parts
cvMerge(image_ReC, image_ImC, NULL, NULL, complex_ImC);
7.Finally perform Inverse DFT
cvShowInvDFT(im, complex_ImC,dft_M1,dft_N1,fp,"deblur");
LAB12
PRELAB:
INLAB:
Kowshik is so good at developing new applications .He wants to build a new application which is based on
openCV that recognizes the face and eyes, but kowshik doesn’t have all the packages required for it.so he asks
his friend praharsha for help and told him to perform face detection as per the instructions given below.
POST LAB:
1) Write the applications of face recognition and explain one of them and how you implement?
Inlab:
FACE RECOGNIZER
import cv2
cam = cv2.VideoCapture(0)
detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
sampleNum=0
while(True):
ret, img = cam.read()
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
sampleNum=sampleNum+1
cv2.imshow('frame',img)
break
elif sampleNum>20:
break
cam.release()
cv2.destroyAllWindows()
Face Training
import os
import cv2
import numpy as np
path='dataset'
def getImagesWithID(path):
faces=[]
IDs=[]
for i in imagePaths:
faceImg=Image.open(i).convert('L')
faceNP=np.array(faceImg,'uint8')
ID=int(os.path.split(i)[-1].split('.')[1])
faces.append(faceNP)
print(ID)
IDs.append(ID)
cv2.imshow("training",faceNP)
cv2.waitKey(10)
return IDs,faces
Ids,faces=getImagesWithID(path)
recognizer.train(faces,np.array(Ids))
recognizer.save('recognizer/trainingdata.yml')
cv2.destroyAllWindows()
Face Detect
import cv2
import numpy as np
faceDetect=cv2.CascadeClassifier('kowshik.xml');
cam=cv2.VideoCapture(0)
rec = cv2.face.LBPHFaceRecognizer_create()
rec.read(r"C:\Users\admin\Desktop\face\recognizer\trainingdata.yml")
id=0
font = cv2.FONT_HERSHEY_SIMPLEX
while(True):
ret,img=cam.read()
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces=faceDetect.detectMultiScale(gray,1.3,5);
for(x,y,w,h) in faces:
id,conf=rec.predict(gray[y:y+h,x:x+w])
if(id==1):
id="Sameer"
elif(id==2):
id="Kowshik"
elif(id==3):
id="praharsha"
elif(id==4):
id="karthik"
else:
id="unknown"
cv2.imshow("Face",img);
if(cv2.waitKey(1)==ord('q')):
break;
cam.release()
cv2.destroyAllWindows()
LAB-13
PRE-LAB:
1. Explain in details what is hough transform by drawing
suitable diagrams?
2. Discuss in details the two following types of Hough
transform, standard and probabilistic hough transform
3. Discuss the applications of the hough transform
4. Discuss and explain the watershed segmentation algorithm
using pseudo-code
IN-LAB:
1. Implement the hough transform using python and opencv
2. Implement the watershed segmentation algorithm using
python and opencv
POST-LAB
1. Obtain the histograms of the original image and the image
obtained after the hough transform
2. Clearly explain the differences between the histograms
LAB14
PRELAB:
INLAB:
Karthik and dheeraj are two best friends who always want to do something crazy things. They want to perform
object detection. First they decide to train the object with some labels and then they want to test that particular
object. They got to know that there are packages called SIFT and SURF for performing their desired actions. But
they don’t know how to use that help them in achieving the following steps:
POST LAB:
1) Write the applications of object detection and explain one of them and how you implement?
Answer:
In lab:
import cv2
import numpy as np
MIN_MATCH_COUNT=30
detector=cv2.xfeatures2d.SIFT_create()
FLANN_INDEX_KDITREE=0
flannParam=dict(algorithm=FLANN_INDEX_KDITREE,tree=5)
flann=cv2.FlannBasedMatcher(flannParam,{})
trainImg=cv2.imread(r'C:\Users\lenovo\Desktop\object\TrainingData\trainImgs.jpg',0)
trainKP,trainDesc=detector.detectAndCompute(trainImg,None)
cam=cv2.VideoCapture(0)
while True:
ret, QueryImgBGR=cam.read()
QueryImg=cv2.cvtColor(QueryImgBGR,cv2.COLOR_BGR2GRAY)
queryKP,queryDesc=detector.detectAndCompute(QueryImg,None)
matches=flann.knnMatch(queryDesc,trainDesc,k=2)
goodMatch=[]
if(m.distance<0.75*n.distance):
goodMatch.append(m)
if(len(goodMatch)>MIN_MATCH_COUNT):
tp=[]
qp=[]
for m in goodMatch:
tp.append(trainKP[m.trainIdx].pt)
qp.append(queryKP[m.queryIdx].pt)
tp,qp=np.float32((tp,qp))
H,status=cv2.findHomography(tp,qp,cv2.RANSAC,3.0)
h,w=trainImg.shape
trainBorder=np.float32([[[0,0],[0,h-1],[w-1,h-1],[w-1,0]]])
queryBorder=cv2.perspectiveTransform(trainBorder,H)
cv2.polylines(QueryImgBGR,[np.int32(queryBorder)],True,(0,255,0),5)
else:
cv2.imshow('result',QueryImgBGR)
if cv2.waitKey(10)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()