title
OpenCV Python for Beginners - Full Course in 10 Hours - Learn Computer Vision with OpenCV
description
Welcome to this courese on OpenCV Python Tutorial For Beginners.
OpenCV is an image processing library created by Intel and later supported by Willow Garage and now maintained by Itseez. opencv is available on Mac, Windows, Linux. Works in C, C++, and Python.
it is Open Source and free. opencv is easy to use and install.
Starting with an overview of what the course will be covering, we move on to discussing morphological operations and practically learn how they work on images. We will then learn contrast enhancement using equalization and contrast limiting. Finally we will learn 3 methods to subtract the background from the video and implement them using OpenCV.
At the end of this course, you will have a firm grasp of Computer Vision techniques using OpenCV libraries. This course will be your gateway to the world of data science.
Feel the real power of Python and programming! The course offers you a unique approach of learning how to code by solving real world problems.
#ProgrammingKnowledge #ComputerVision #OpenCV
1 - Introduction to OpenCV
2 - How to Install OpenCV for Python on Windows 10
3 - How to Read, Write, Show Images in OpenCV
4 - How to Read, Write, Show Videos from Camera in OpenCV
5 - Draw geometric shapes on images using Python OpenCV
6 - Setting Camera Parameters in OpenCV Python
7 - Show Date and Time on Videos using OpenCV Python
8 - Handle Mouse Events in OpenCV
9 - More Mouse Event Examples in OpenCV Python
10 - cv.split, cv.merge, cv.resize, cv.add, cv.addWeighted, ROI
11- Bitwise Operations (bitwise AND, OR, NOT and XOR)
12 - How to Bind Trackbar To OpenCV Windows
13 - Object Detection and Object Tracking Using HSV Color Space
14 - Simple Image Thresholding
15 - Adaptive Thresholding
16 - matplotlib with OpenCV
17 - Morphological Transformations
18 - Smoothing Images | Blurring Images OpenCV
19 - Image Gradients and Edge Detection
20 - Canny Edge Detection in OpenCV
21 - Image Pyramids with Python and OpenCV
22 - Image Blending using Pyramids in OpenCV
22 - Image Blending using Pyramids in OpenCV
23 - Find and Draw Contours with OpenCV in Python
24 - Motion Detection and Tracking Using Opencv Contours
25 - Detect Simple Geometric Shapes using OpenCV in Python
26 - Understanding image Histograms using OpenCV Python
27 - Template matching using OpenCV in Python
28 - Hough Line Transform Theory
29 - Hough Line Transform using HoughLines method in OpenCV
30 - Probabilistic Hough Transform using HoughLinesP in OpenCV
31 - Road Lane Line Detection with OpenCV (Part 1)
32 - Road Lane Line Detection with OpenCV (Part 2)
33 - Road Lane Line Detection with OpenCV (Part 3)
34 - Circle Detection using OpenCV Hough Circle Transform
35 - Face Detection using Haar Cascade Classifiers
36 - Eye Detection Haar Feature based Cascade Classifiers
37 - Detect Corners with Harris Corner Detector in OpenCV
38 - Detect Corners with Shi Tomasi Corner Detector in OpenCV
39 - How to Use Background Subtraction Methods in OpenCV
40 - Mean Shift Object Tracking
41 - Object Tracking Camshift Method
#ProgrammingKnowledge #ComputerVision #OpenCV
★★★Top Online Courses From ProgrammingKnowledge ★★★
Python Programming Course ➡️ http://bit.ly/2vsuMaS ⚫️ http://bit.ly/2GOaeQB
Java Programming Course ➡️ http://bit.ly/2GEfQMf ⚫️ http://bit.ly/2Vvjy4a
Bash Shell Scripting Course ➡️ http://bit.ly/2DBVF0C ⚫️ http://bit.ly/2UM06vF
Linux Command Line Tutorials ➡️ http://bit.ly/2IXuil0 ⚫️ http://bit.ly/2IXukt8
C Programming Course ➡️ http://bit.ly/2GQCiD1 ⚫️ http://bit.ly/2ZGN6ej
C++ Programming Course ➡️ http://bit.ly/2V4oEVJ ⚫️ http://bit.ly/2XMvqMs
PHP Programming Course ➡️ http://bit.ly/2XP71WH ⚫️ http://bit.ly/2vs3od6
Android Development Course ➡️ http://bit.ly/2UHih5H ⚫️ http://bit.ly/2IMhVci
C# Programming Course ➡️ http://bit.ly/2Vr7HEl ⚫️ http://bit.ly/2W6RXTU
JavaFx Programming Course ➡️ http://bit.ly/2XMvZWA ⚫️ http://bit.ly/2V2CoAi
NodeJs Programming Course ➡️ http://bit.ly/2GPg7gA ⚫️ http://bit.ly/2GQYTQ2
Jenkins Course For Developers and DevOps ➡️ http://bit.ly/2Wd4l4W ⚫️ http://bit.ly/2J1B1ug
Scala Programming Tutorial Course ➡️ http://bit.ly/2PysyA4 ⚫️ http://bit.ly/2PCaVj2
Bootstrap Responsive Web Design Tutorial ➡️ http://bit.ly/2DFQ2yC ⚫️ http://bit.ly/2VoJWwH
MongoDB Tutorial Course ➡️ http://bit.ly/2LaCJfP ⚫️ http://bit.ly/2WaI7Ap
QT C++ GUI Tutorial For Beginners ➡️ http://bit.ly/2vwqHSZ
★★★ Online Courses to learn ★★★
Get 2 FREE Months of Unlimited Classes from skillshare - https://skillshare.eqcm.net/r1KEj
Data Science - http://bit.ly/2lD9h5L | http://bit.ly/2lI8wIl
Machine Learning - http://bit.ly/2WGGQpb | http://bit.ly/2GghLXX
DISCLAIMER: This video and description contains affiliate links, which means that if you click on one of the product links, I’ll receive a small commission. This help support the channel and allows us to continue to make videos like this. Thank you for the support!
detail
{'title': 'OpenCV Python for Beginners - Full Course in 10 Hours - Learn Computer Vision with OpenCV', 'heatmap': [{'end': 1357.846, 'start': 1003.477, 'weight': 0.927}, {'end': 3045.56, 'start': 1691.081, 'weight': 0.792}, {'end': 4080.747, 'start': 3719.83, 'weight': 0.872}, {'end': 9475.372, 'start': 9131.497, 'weight': 0.809}, {'end': 10488.128, 'start': 10145.249, 'weight': 0.899}, {'end': 12862.722, 'start': 12514.455, 'weight': 0.705}], 'summary': "Tutorial titled 'opencv python for beginners - full course in 10 hours - learn computer vision with opencv' covers a comprehensive range of topics including opencv basics, installation, image and video manipulation, track bars, object tracking, morphological transformations, edge detection, shape recognition, histograms, hough transform, line detection, vehicle perception enhancement, lane detection, circle detection, real-time face and eye detection, object tracking, and background subtraction in opencv, providing practical demonstrations and code examples.", 'chapters': [{'end': 229.417, 'segs': [{'end': 53.309, 'src': 'embed', 'start': 29.162, 'weight': 2, 'content': [{'end': 38.855, 'text': 'So what happens when a human see an image? He will be able to recognize the faces which are there inside the images.', 'start': 29.162, 'duration': 9.693}, {'end': 47.764, 'text': 'So in its simplest form, computer vision is what allows computers to see and process visual data just like humans.', 'start': 39.435, 'duration': 8.329}, {'end': 53.309, 'text': 'Computer vision involves analyzing images to produce useful information.', 'start': 48.284, 'duration': 5.025}], 'summary': 'Computer vision enables computers to recognize faces and process visual data like humans.', 'duration': 24.147, 'max_score': 29.162, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ29162.jpg'}, {'end': 199.853, 'src': 'embed', 'start': 137.873, 'weight': 0, 'content': [{'end': 142.759, 'text': 'Now, because OpenCV primarily deals with computer vision.', 'start': 137.873, 'duration': 4.886}, {'end': 153.133, 'text': 'that means dealing with mainly images or videos, so I wanted to show you how a digital image is seen by a computer.', 'start': 142.759, 'duration': 10.374}, {'end': 158.296, 'text': 'So digital images are typically stored in the form of matrix.', 'start': 153.473, 'duration': 4.823}, {'end': 166.12, 'text': 'Now, if you have heard about PPI or pixel per inch, which refers display resolution,', 'start': 158.796, 'duration': 7.324}, {'end': 173.244, 'text': 'that means how many individual pixels are displayed in one inch of digital image?', 'start': 166.12, 'duration': 7.124}, {'end': 180.568, 'text': 'So when a computer sees a picture, it sees it in the form of pixel matrix.', 'start': 173.464, 'duration': 7.104}, {'end': 183.229, 'text': 'Now there are two type of digital images.', 'start': 180.928, 'duration': 2.301}, {'end': 188.93, 'text': 'One are called grayscale images and other are called colored images.', 'start': 184.029, 'duration': 4.901}, {'end': 195.652, 'text': 'So in grayscale images, each pixel represents the intensity of only one shade.', 'start': 189.15, 'duration': 6.502}, {'end': 199.853, 'text': 'That means how bright or dark the pixel is.', 'start': 196.252, 'duration': 3.601}], 'summary': 'Opencv deals with digital images, stored as matrices, seen by the computer as pixel matrices, with grayscale and colored images, representing shades of brightness.', 'duration': 61.98, 'max_score': 137.873, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ137873.jpg'}], 'start': 0.75, 'title': 'Opencv basics and computer vision', 'summary': 'Introduces opencv, discussing its applications, development, and ease of use, while also explaining how computers view digital images, including details on image storage, ppi, and grayscale versus colored images.', 'chapters': [{'end': 137.493, 'start': 0.75, 'title': 'Opencv basics: introduction and applications', 'summary': "Introduces opencv as an open source computer vision library, explaining computer vision and its applications, and provides an overview of opencv's development, platform compatibility, and ease of use.", 'duration': 136.743, 'highlights': ['OpenCV is an open source computer vision library, enabling machines to see and process visual data like humans, with applications in self-driving cars and social media image recognition.', 'Computer vision involves analyzing images to produce useful information, such as detecting lanes in self-driving cars and recognizing faces in social media images.', 'OpenCV, standing for Open Source Computer Vision, is a cross-platform library available on Mac, Windows, and various Linux operating systems, supporting C, C++, and Python, and licensed under BSD license.']}, {'end': 229.417, 'start': 137.873, 'title': 'Computer vision and digital images', 'summary': 'Explains how a computer views digital images, discussing the storage format of digital images as matrices, the concept of ppi, and the distinction between grayscale and colored images based on the number of channels.', 'duration': 91.544, 'highlights': ['Digital images are stored in the form of matrices and can be classified into grayscale images, which have one channel, and colored images, which have three channels (RGB).', 'The concept of PPI (pixel per inch) refers to the display resolution, indicating how many individual pixels are displayed in one inch of a digital image.', 'Grayscale images represent the intensity of only one shade, while colored images utilize three channels (red, green, blue) to represent color information.']}], 'duration': 228.667, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ750.jpg', 'highlights': ['OpenCV is an open source computer vision library, enabling machines to see and process visual data like humans, with applications in self-driving cars and social media image recognition.', 'Computer vision involves analyzing images to produce useful information, such as detecting lanes in self-driving cars and recognizing faces in social media images.', 'OpenCV, standing for Open Source Computer Vision, is a cross-platform library available on Mac, Windows, and various Linux operating systems, supporting C, C++, and Python, and licensed under BSD license.', 'Digital images are stored in the form of matrices and can be classified into grayscale images, which have one channel, and colored images, which have three channels (RGB).', 'The concept of PPI (pixel per inch) refers to the display resolution, indicating how many individual pixels are displayed in one inch of a digital image.', 'Grayscale images represent the intensity of only one shade, while colored images utilize three channels (red, green, blue) to represent color information.']}, {'end': 2576.908, 'segs': [{'end': 485.632, 'src': 'embed', 'start': 435.898, 'weight': 2, 'content': [{'end': 448.427, 'text': "so you can see python's 3.7.0 setup window has been started and on the first window you will see two options here one is install now and other is customize installation.", 'start': 435.898, 'duration': 12.529}, {'end': 455.772, 'text': 'so what we are going to choose is this option which says customize installation, because when you choose this install now,', 'start': 448.427, 'duration': 7.345}, {'end': 462.097, 'text': "option python will be installed at this path, which i don't want to use.", 'start': 455.772, 'duration': 6.325}, {'end': 465.82, 'text': "you can see it's a long path which i don't want to remember.", 'start': 462.097, 'duration': 3.723}, {'end': 472.785, 'text': 'so i will use this option which says customize installation, and i will also check this option which says add python 3.7 to path.', 'start': 465.82, 'duration': 6.965}, {'end': 485.632, 'text': "so now let's click on customize installation and next you will see this optional feature window and you can see there are some optional feature which this python installer will install,", 'start': 474.006, 'duration': 11.626}], 'summary': 'Customize python 3.7.0 setup, adding to path', 'duration': 49.734, 'max_score': 435.898, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ435898.jpg'}, {'end': 785.997, 'src': 'embed', 'start': 758.612, 'weight': 5, 'content': [{'end': 765.121, 'text': "install opencv-python and I'm going to press enter.", 'start': 758.612, 'duration': 6.509}, {'end': 769.487, 'text': 'So you can see OpenCV related packages are downloading now.', 'start': 765.381, 'duration': 4.106}, {'end': 775.491, 'text': 'So now OpenCV Python package is installed using pip on my Windows operating system.', 'start': 770.268, 'duration': 5.223}, {'end': 785.997, 'text': 'Now you will observe one more thing here and that is NumPy package will be automatically installed with your OpenCV Python package.', 'start': 775.931, 'duration': 10.066}], 'summary': 'Opencv python and numpy installed using pip on windows os', 'duration': 27.385, 'max_score': 758.612, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ758612.jpg'}, {'end': 905.317, 'src': 'embed', 'start': 880.647, 'weight': 7, 'content': [{'end': 888.889, 'text': 'inside Visual Studio code, you can just press control, shift P and then type toggle integrated terminal.', 'start': 880.647, 'duration': 8.242}, {'end': 895.091, 'text': 'So just type toggle integrated terminal and then click on this first option which says toggle integrated terminal.', 'start': 889.049, 'duration': 6.042}, {'end': 900.514, 'text': 'this is going to open the terminal inside your Visual Studio Code editor.', 'start': 895.791, 'duration': 4.723}, {'end': 905.317, 'text': 'So here you can run your Python script using the Python command.', 'start': 901.054, 'duration': 4.263}], 'summary': "In visual studio code, open the integrated terminal by pressing control, shift p and typing 'toggle integrated terminal', allowing running python scripts.", 'duration': 24.67, 'max_score': 880.647, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ880647.jpg'}, {'end': 1357.846, 'src': 'heatmap', 'start': 1003.477, 'weight': 0.927, 'content': [{'end': 1017.224, 'text': 'so to install OpenCV Python package on PyCharm, you just need to click on this plus button here and then you just need to type OpenCV hyphen Python.', 'start': 1003.477, 'duration': 13.747}, {'end': 1024.768, 'text': 'now the first result you can see here is OpenCV hyphen Python, and the version which is available right now is 4.0.0.21,', 'start': 1017.224, 'duration': 7.544}, {'end': 1026.329, 'text': 'which is the latest version.', 'start': 1024.768, 'duration': 1.561}, {'end': 1037.377, 'text': 'So to install this package for your PyCharm IDE, you just need to click on install package button and then, after some time,', 'start': 1029.631, 'duration': 7.746}, {'end': 1044.144, 'text': 'you will see this message which says package opencv-python installed successfully in the green bar.', 'start': 1037.377, 'duration': 6.767}, {'end': 1046.926, 'text': 'that means opencv package is installed successfully.', 'start': 1044.144, 'duration': 2.782}, {'end': 1058.694, 'text': 'So you can close this window and now you will be able to see opencv-python is added to your packages and also numpy is added to your packages,', 'start': 1047.407, 'duration': 11.287}, {'end': 1062.995, 'text': 'which comes with your opencv python package.', 'start': 1058.694, 'duration': 4.301}, {'end': 1070.976, 'text': "so i'm going to just click ok, and now you will be able to import this cv2 package in your python script.", 'start': 1062.995, 'duration': 7.981}, {'end': 1079.778, 'text': "now, in this video, i'm going to show you how you can read images and write images using cv2 package.", 'start': 1070.976, 'duration': 8.802}, {'end': 1084.981, 'text': 'Now let me show you where you can find some sample images for your project.', 'start': 1079.898, 'duration': 5.083}, {'end': 1095.026, 'text': 'So you can open the browser and then go to this URL github.com forward slash OpenCV.', 'start': 1085.761, 'duration': 9.265}, {'end': 1104.491, 'text': 'So just go to this URL and then under this OpenCV project in GitHub, you will be able to see these repositories.', 'start': 1095.647, 'duration': 8.844}, {'end': 1118.147, 'text': 'You just need to choose this repository, which says OpenCV, and then you can scroll down and all the images you will find inside the samples folder.', 'start': 1105.012, 'duration': 13.135}, {'end': 1122.994, 'text': "so i'm going to go inside the sample folder and then inside the sample folder.", 'start': 1118.147, 'duration': 4.847}, {'end': 1125.457, 'text': 'you just need to go inside the data folder.', 'start': 1122.994, 'duration': 2.463}, {'end': 1136.849, 'text': 'So here you will find many sample images and videos and other files which you can use in your project for the learning purpose.', 'start': 1126.118, 'duration': 10.731}, {'end': 1143.056, 'text': 'So you can use these images in order to develop your example.', 'start': 1137.45, 'duration': 5.606}, {'end': 1151.102, 'text': 'So what I generally do is I just go to this repository, which is under the URL github.com.', 'start': 1143.676, 'duration': 7.426}, {'end': 1152.523, 'text': 'forward slash opencv.', 'start': 1151.102, 'duration': 1.421}, {'end': 1166.275, 'text': 'forward slash opencv and then I either download the zip file of this project or clone this github repository on my operating system.', 'start': 1152.523, 'duration': 13.752}, {'end': 1180.06, 'text': 'and once you clone or download this repository, it will look like this so it will be downloaded as this folder, which is opencv-master,', 'start': 1167.035, 'duration': 13.025}, {'end': 1193.706, 'text': 'and once again you can go to the samples folder here and inside the samples folder you can go to the data folder and you will find all those images which i have shown you on the github repository.', 'start': 1180.06, 'duration': 13.646}, {'end': 1201.028, 'text': 'now, to start with, we will be using this image, which is lena.jpg.', 'start': 1194.466, 'duration': 6.562}, {'end': 1213.633, 'text': "so i'm going to just copy this image for now and then i'm going to go to my pycharm ide and then i'm going to just paste this image inside my project.", 'start': 1201.028, 'duration': 12.605}, {'end': 1219.735, 'text': 'so this jpg image will be directly available inside my project folder.', 'start': 1213.633, 'duration': 6.102}, {'end': 1226.596, 'text': "now let's see how we can read images using the cv2 module.", 'start': 1220.735, 'duration': 5.861}, {'end': 1237.539, 'text': 'so you just need to use cv2 and there is a method called imread which enables you to read the images.', 'start': 1226.596, 'duration': 10.943}, {'end': 1241.26, 'text': 'so the first argument which you need to give here is the image name.', 'start': 1237.539, 'duration': 3.721}, {'end': 1251.763, 'text': "so i'm going to give the image name, which is lena.jpg, And the second argument here is a flag.", 'start': 1241.26, 'duration': 10.503}, {'end': 1255.204, 'text': 'So there are three flags you can give here.', 'start': 1252.463, 'duration': 2.741}, {'end': 1258.846, 'text': 'You can either give 0 or 1 or minus 1 flag here.', 'start': 1255.625, 'duration': 3.221}, {'end': 1269.771, 'text': 'So this second argument is a flag which specifies the way images should be read.', 'start': 1263.368, 'duration': 6.403}, {'end': 1271.612, 'text': 'So let me show you all the flags here.', 'start': 1269.951, 'duration': 1.661}, {'end': 1281.356, 'text': 'So the first flag is cv2.imread underscore color or you can give the integer value of it, which is one.', 'start': 1272.152, 'duration': 9.204}, {'end': 1289.56, 'text': "And whenever you give this flag as the second argument of imread function, it's going to load the colored image.", 'start': 1281.976, 'duration': 7.584}, {'end': 1299.429, 'text': 'if you give this flag, which is cv2 dot, iam read underscore, grayscale, or if you give this integer value, which is zero,', 'start': 1290.12, 'duration': 9.309}, {'end': 1308.237, 'text': "it's going to load your image in grayscale mode and the third flag is iam read underscore, unchanged,", 'start': 1299.429, 'duration': 8.808}, {'end': 1316.184, 'text': 'or the value minus one which is going to load your image as it is, including the alpha channel.', 'start': 1308.237, 'duration': 7.947}, {'end': 1324.372, 'text': 'so for now we are going to just give here zero flag, which means we want to load our image in grayscale.', 'start': 1316.184, 'duration': 8.188}, {'end': 1327.215, 'text': "so now let's run the code and let's see what happens.", 'start': 1324.372, 'duration': 2.843}, {'end': 1333.381, 'text': 'until this point, so you can see our code runs fine without giving any error.', 'start': 1327.215, 'duration': 6.166}, {'end': 1348.116, 'text': 'now let me give any random name here as the file name and once again run this code and once again you will see that there is no exception which is thrown here.', 'start': 1334.122, 'duration': 13.994}, {'end': 1357.846, 'text': 'so even if you give the wrong file path or file name here, this function is not going to give you any error.', 'start': 1348.116, 'duration': 9.73}], 'summary': 'Installing opencv python package on pycharm and reading images using cv2 module.', 'duration': 354.369, 'max_score': 1003.477, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ1003477.jpg'}, {'end': 1562.787, 'src': 'embed', 'start': 1533.113, 'weight': 10, 'content': [{'end': 1538.795, 'text': 'so you can just give this method cv to destroy all windows.', 'start': 1533.113, 'duration': 5.682}, {'end': 1544.797, 'text': 'so destroy all windows simply destroys all the windows which we have created.', 'start': 1538.795, 'duration': 6.002}, {'end': 1556.744, 'text': 'there is one more method, which is destroyWindow, and this method you can use to destroy a particular window which we will see little bit later.', 'start': 1545.017, 'duration': 11.727}, {'end': 1562.787, 'text': 'but for now we will just use this method which says destroyAllWindows.', 'start': 1556.744, 'duration': 6.043}], 'summary': "The method 'destroyallwindows' can be used to destroy all windows created.", 'duration': 29.674, 'max_score': 1533.113, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ1533113.jpg'}, {'end': 1654.595, 'src': 'embed', 'start': 1624.173, 'weight': 1, 'content': [{'end': 1629.056, 'text': "let's also check the minus one argument which is unchanged.", 'start': 1624.173, 'duration': 4.883}, {'end': 1635.14, 'text': "so it's going to just load the image as it is with alpha channels.", 'start': 1629.056, 'duration': 6.084}, {'end': 1638.362, 'text': 'so let me just close this image once again.', 'start': 1635.14, 'duration': 3.222}, {'end': 1644.766, 'text': 'so now we have understood how we can read an image using im read function.', 'start': 1638.362, 'duration': 6.404}, {'end': 1654.595, 'text': "so let's see how we can write an image to a file using a function called i am right.", 'start': 1645.606, 'duration': 8.989}], 'summary': 'Demonstrates reading and writing images using im read and im write functions.', 'duration': 30.422, 'max_score': 1624.173, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ1624173.jpg'}, {'end': 1893.656, 'src': 'embed', 'start': 1864.076, 'weight': 0, 'content': [{'end': 1872.546, 'text': 'and then we will simply destroy all the windows which we have created using I am show method.', 'start': 1864.076, 'duration': 8.47}, {'end': 1874.848, 'text': "so let's run the code and let's see what happens.", 'start': 1872.546, 'duration': 2.302}, {'end': 1876.468, 'text': "so I'm going to run the code.", 'start': 1874.848, 'duration': 1.62}, {'end': 1885.392, 'text': 'so this image is loaded and as soon as I press escape button, you can see this image disappears.', 'start': 1876.468, 'duration': 8.924}, {'end': 1893.656, 'text': 'that means this condition is met and this method is called and all the windows will be destroyed without saving the image.', 'start': 1885.392, 'duration': 8.264}], 'summary': 'Image disappears when escape button is pressed, triggering window destruction.', 'duration': 29.58, 'max_score': 1864.076, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ1864076.jpg'}, {'end': 2388.057, 'src': 'embed', 'start': 2358.059, 'weight': 4, 'content': [{'end': 2366.321, 'text': 'and now you can see the video captured is in grayscale image and as soon as i press q,', 'start': 2358.059, 'duration': 8.262}, {'end': 2371.563, 'text': "it's going to release all the captured resources and then destroy all windows.", 'start': 2366.321, 'duration': 5.242}, {'end': 2382.072, 'text': 'Now, as I said, if you want to display the image from a video file, you just need to give the name of the video file, for example, name,', 'start': 2371.883, 'duration': 10.189}, {'end': 2388.057, 'text': "and then the extension, which is, let's say, AVI or MP4 or any other format.", 'start': 2382.072, 'duration': 5.985}], 'summary': 'Video captured in grayscale, resources released on key press, display image from video file by providing name and extension.', 'duration': 29.998, 'max_score': 2358.059, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ2358059.jpg'}, {'end': 2445.543, 'src': 'embed', 'start': 2417.992, 'weight': 3, 'content': [{'end': 2420.453, 'text': 'this is going to give us true.', 'start': 2417.992, 'duration': 2.461}, {'end': 2430.676, 'text': 'otherwise this is opened is going to give us false in case the file path is wrong or the index which you give here for the device is wrong.', 'start': 2420.453, 'duration': 10.223}, {'end': 2436.158, 'text': "so let's give any random index here and then let's see what happens.", 'start': 2430.676, 'duration': 5.482}, {'end': 2440.86, 'text': "so i'm going to run this script and you will see nothing will happen.", 'start': 2436.158, 'duration': 4.702}, {'end': 2445.543, 'text': 'because this is opened is going to give you false.', 'start': 2440.86, 'duration': 4.683}], 'summary': 'The script will return false if the file path or index is wrong.', 'duration': 27.551, 'max_score': 2417.992, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ2417992.jpg'}], 'start': 229.977, 'title': 'Opencv installation and image processing in python', 'summary': 'Covers the installation process of python 3.7.0 and opencv on windows, including the use of numpy, step-by-step installation guides, and demonstrations of image reading, display, and live stream capture using opencv. it also details the usage of specific flags for image loading, insights into waitkey function, and provides insights into capturing live video stream from a default camera with a while loop for continuous frame capture.', 'chapters': [{'end': 435.898, 'start': 229.977, 'title': 'Opencv installation for python on windows', 'summary': 'Introduces the use of numpy and its role in processing images with opencv in python. it also covers the installation process of python and opencv on a windows operating system with a focus on python 3.7.0.', 'duration': 205.921, 'highlights': ['NumPy is a highly optimized library for numerical operations, facilitating the processing of 2D arrays of pixels in digital images and providing a more convenient indexing system. NumPy is a highly optimized library for numerical operations and offers a more convenient indexing system, making the processing of 2D arrays of pixels in digital images easier.', 'Python 3.7.0 is the latest version of Python available at the time of making the video, and the installation process is demonstrated using the windows x86-64 executable installer. Python 3.7.0 is the latest version available, and the installation process is demonstrated using the windows x86-64 executable installer.', 'The chapter introduces the use of NumPy and its role in processing images with OpenCV in Python, along with the step-by-step installation process of Python and OpenCV on a Windows operating system. The chapter introduces the use of NumPy and its role in processing images with OpenCV in Python, along with the step-by-step installation process of Python and OpenCV on a Windows operating system.']}, {'end': 905.317, 'start': 435.898, 'title': 'Python 3.7.0 installation process', 'summary': 'Details the step-by-step process of installing python 3.7.0 on a windows operating system, including customizing the installation, setting the install location, verifying the installation, installing opencv using pip, and verifying the opencv installation through python and visual studio code.', 'duration': 469.419, 'highlights': ["The installation process involves choosing the 'customize installation' option, adding Python 3.7 to the path, and specifying the installation location, such as the C directory. Customizing the installation allows for selecting the installation options, including adding Python 3.7 to the path and specifying the installation location in the C directory.", "The chapter covers the verification of Python installation through various methods, including using the Python terminal, IDLE IDE, and the command prompt, ensuring Python's functionality across different interfaces. The verification process ensures Python's functionality through the Python terminal, IDLE IDE, and the command prompt, demonstrating its successful installation and operation across different interfaces.", 'The process of installing OpenCV using pip is explained, with emphasis on the automatic installation of the NumPy package alongside OpenCV, and the subsequent verification of the OpenCV installation through Python and Visual Studio Code. The installation of OpenCV using pip is detailed, highlighting the automatic installation of the NumPy package alongside OpenCV and the subsequent verification of the OpenCV installation through Python and Visual Studio Code.']}, {'end': 1327.215, 'start': 905.337, 'title': 'Installing opencv for python on windows', 'summary': 'Details the installation process of opencv for python on a windows operating system using pycharm ide, including the version of opencv installed, and demonstrates how to read and write images using the cv2 package with specific flags for image loading.', 'duration': 421.878, 'highlights': ['The chapter details the installation process of OpenCV for Python on a Windows operating system using PyCharm IDE. Installation process, Python, Windows, PyCharm IDE', 'The version of OpenCV installed on the operating system is 4.0.0.21. OpenCV version, 4.0.0.21', 'Demonstrates how to read and write images using the cv2 package with specific flags for image loading. Reading and writing images, cv2 package, specific flags']}, {'end': 1949.937, 'start': 1327.215, 'title': 'Image reading and display with opencv', 'summary': 'Demonstrates how to read, display, and write images using opencv, including handling errors and user input, and provides insights into the waitkey function and its usage with quantifiable data.', 'duration': 622.722, 'highlights': ["The chapter demonstrates how to read an image using the imread method, handle wrong file paths or names, and validate the image content by checking for 'None' value. The chapter explains how to handle wrong file paths or names when reading an image, and validates the image content by checking for 'None' value, providing insights into error handling.", "The chapter explains the usage of cv2's imshow method to display an image and introduces waitKey method to control the display duration, including details on destroying the window after display. The chapter explains the usage of cv2's imshow method to display an image and introduces waitKey method to control the display duration, including details on destroying the window after display, providing insights into image display and control.", 'The chapter illustrates how to write an image to a file using the imwrite method, and showcases the creation of a new file with the specified image name, providing insights into image writing and file creation. The chapter illustrates how to write an image to a file using the imwrite method, and showcases the creation of a new file with the specified image name, providing insights into image writing and file creation.', "The chapter demonstrates how to capture user input to control the behavior of the program, including handling the escape key to destroy all windows and the 's' key to save the image with a new name. The chapter demonstrates how to capture user input to control the behavior of the program, including handling the escape key to destroy all windows and the 's' key to save the image with a new name, providing insights into user input handling.", 'The chapter advises using the waitKey method with the mask notation when using a 64-bit machine, providing guidance for optimal usage on 64-bit machines. The chapter advises using the waitKey method with the mask notation when using a 64-bit machine, providing guidance for optimal usage on 64-bit machines.']}, {'end': 2576.908, 'start': 1949.937, 'title': 'Capturing live stream from camera', 'summary': 'Discusses how to capture, display, and save live video stream from a default camera using opencv, including creating a while loop to continuously capture frames, converting the captured video to grayscale, and reading properties of the captured video.', 'duration': 626.971, 'highlights': ['The chapter discusses how to capture the live stream from a default camera using OpenCV. It explains creating a while loop to continuously capture frames, converting the captured video to grayscale, and reading properties of the captured video.', "The method to capture the live stream from the camera using the default device index (0) is explained, with the suggestion to try index -1 if index 0 doesn't work. It provides guidance on trying device index -1 if index 0 doesn't work for capturing the live stream.", 'The process of converting the video input from colored image to grayscale is demonstrated. It demonstrates the method to convert the video input from colored image to grayscale using the cv2.cvtcolor method.', 'Reading properties of the captured video, such as checking if the video is open, and obtaining frame width and height using prop IDs, is explained. It explains how to read properties of the captured video, including checking if the video is open and obtaining frame width and height using prop IDs.']}], 'duration': 2346.931, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ229977.jpg', 'highlights': ['Python 3.7.0 is the latest version available, and the installation process is demonstrated using the windows x86-64 executable installer.', "The installation process involves choosing the 'customize installation' option, adding Python 3.7 to the path, and specifying the installation location, such as the C directory.", 'The process of installing OpenCV using pip is explained, with emphasis on the automatic installation of the NumPy package alongside OpenCV, and the subsequent verification of the OpenCV installation through Python and Visual Studio Code.', 'The version of OpenCV installed on the operating system is 4.0.0.21.', "The chapter explains how to handle wrong file paths or names when reading an image, and validates the image content by checking for 'None' value, providing insights into error handling.", "The chapter explains the usage of cv2's imshow method to display an image and introduces waitKey method to control the display duration, including details on destroying the window after display, providing insights into image display and control.", 'The chapter illustrates how to write an image to a file using the imwrite method, and showcases the creation of a new file with the specified image name, providing insights into image writing and file creation.', 'The chapter advises using the waitKey method with the mask notation when using a 64-bit machine, providing guidance for optimal usage on 64-bit machines.', "The method to capture the live stream from the camera using the default device index (0) is explained, with the suggestion to try index -1 if index 0 doesn't work for capturing the live stream.", 'The process of converting the video input from colored image to grayscale is demonstrated. It demonstrates the method to convert the video input from colored image to grayscale using the cv2.cvtcolor method.', 'Reading properties of the captured video, such as checking if the video is open, and obtaining frame width and height using prop IDs, is explained.']}, {'end': 4442.044, 'segs': [{'end': 2905.918, 'src': 'embed', 'start': 2851.108, 'weight': 2, 'content': [{'end': 2854.35, 'text': "so i'm going to just write out dot release.", 'start': 2851.108, 'duration': 3.242}, {'end': 2858.773, 'text': "then let's run the script and let's see what happens.", 'start': 2855.19, 'duration': 3.583}, {'end': 2864.337, 'text': 'so one thing to note here is our video will be saved as it is.', 'start': 2858.773, 'duration': 5.564}, {'end': 2869.261, 'text': 'that is in the BGR mode, that is in the colored mode.', 'start': 2864.337, 'duration': 4.924}, {'end': 2871.802, 'text': "so let's run the code and let's see what happens.", 'start': 2869.261, 'duration': 2.541}, {'end': 2879.148, 'text': "so I'm going to just start my script once again, and now I'm going to just press Q,", 'start': 2871.802, 'duration': 7.346}, {'end': 2887.351, 'text': 'and so you can see here our video is shown in the grayscale and our video will be saved in the original from format,', 'start': 2879.148, 'duration': 8.203}, {'end': 2891.353, 'text': 'because we are saving every frame before the conversion.', 'start': 2887.351, 'duration': 4.002}, {'end': 2894.314, 'text': 'so it will be saved in the original format.', 'start': 2891.353, 'duration': 2.961}, {'end': 2905.918, 'text': "so i'm going to just close this script and as soon as i close the script, you can see the output.avi file and in order to verify this file,", 'start': 2894.314, 'duration': 11.604}], 'summary': 'Script processes video in bgr mode, saving in original format, output.avi created', 'duration': 54.81, 'max_score': 2851.108, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ2851108.jpg'}, {'end': 3179.945, 'src': 'embed', 'start': 3128.017, 'weight': 0, 'content': [{'end': 3131.959, 'text': 'so starting from 1 1 is the lowest thickness.', 'start': 3128.017, 'duration': 3.942}, {'end': 3138.022, 'text': "you can increase the thickness 2 or 3, or let's say, 5 or 10.", 'start': 3131.959, 'duration': 6.063}, {'end': 3141.683, 'text': "so it's going to increase the thickness based upon this number.", 'start': 3138.022, 'duration': 3.661}, {'end': 3144.525, 'text': "so let's say we want to give the thickness to our line.", 'start': 3141.683, 'duration': 2.842}, {'end': 3150.307, 'text': 'So this is going to draw a red line on our image.', 'start': 3146.085, 'duration': 4.222}, {'end': 3152.667, 'text': "So let's run the code and let's see what happens.", 'start': 3150.427, 'duration': 2.24}, {'end': 3157.529, 'text': 'So you can see our image is loaded in the grayscale.', 'start': 3153.348, 'duration': 4.181}, {'end': 3164.151, 'text': "That's why you don't see any color on the line, but our line is created here.", 'start': 3157.889, 'duration': 6.262}, {'end': 3173.039, 'text': "So let's load this image in the colored format by changing this argument to one and let's run the code once again.", 'start': 3164.511, 'duration': 8.528}, {'end': 3179.945, 'text': 'And you will see the image is loaded in the colored format and the line color is red.', 'start': 3173.58, 'duration': 6.365}], 'summary': 'Code increases line thickness and color, displaying red line on grayscale and colored images.', 'duration': 51.928, 'max_score': 3128.017, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ3128017.jpg'}, {'end': 4080.747, 'src': 'heatmap', 'start': 3719.83, 'weight': 0.872, 'content': [{'end': 3731.797, 'text': 'So you can see here OpenCV is printed in the white color of thickness 10 and if you want to change this color, you can change it from here.', 'start': 3719.83, 'duration': 11.967}, {'end': 3739.202, 'text': "So I'm going to just put the first channel as 0 and now this color is changed to yellow color.", 'start': 3731.837, 'duration': 7.365}, {'end': 3747.689, 'text': 'now, one more thing i want to show here is how you can create an image using numpy zeros method.', 'start': 3739.582, 'duration': 8.107}, {'end': 3754.274, 'text': 'so either you can use a image which you read from imread method,', 'start': 3747.689, 'duration': 6.585}, {'end': 3764.242, 'text': "or what you can do here is i'm going to just comment this code and we can create an image using the numpy zeros method.", 'start': 3754.274, 'duration': 9.968}, {'end': 3771.448, 'text': "so i'm going to create this img variable And then I'm going to use the numpy module.", 'start': 3764.242, 'duration': 7.206}, {'end': 3774.931, 'text': 'So just import this numpy as import numpy as np.', 'start': 3771.568, 'duration': 3.363}, {'end': 3780.515, 'text': 'And then we are going to use this np to call the zeros method.', 'start': 3775.371, 'duration': 5.144}, {'end': 3788.682, 'text': 'Now in order to create a black image using this zeros method, you need to give the first argument in the form of list.', 'start': 3780.835, 'duration': 7.847}, {'end': 3790.943, 'text': 'inside this list.', 'start': 3789.822, 'duration': 1.121}, {'end': 3797.946, 'text': 'the first element will be the height, second will be the width and third will be 3.', 'start': 3790.943, 'duration': 7.003}, {'end': 3808.23, 'text': "so let's say we want to provide the height 512, we want to provide the width also 512 and the third argument will be 3.", 'start': 3797.946, 'duration': 10.284}, {'end': 3813.472, 'text': 'and the next argument you give here is the D type or data type, so you can just write NP.', 'start': 3808.23, 'duration': 5.242}, {'end': 3827.122, 'text': 'So this method is going to give you a black image of the size 512 by 512..', 'start': 3819.236, 'duration': 7.886}, {'end': 3829.284, 'text': "So let's run our code and let's see what happens.", 'start': 3827.122, 'duration': 2.162}, {'end': 3830.504, 'text': 'So you can see.', 'start': 3829.744, 'duration': 0.76}, {'end': 3837.13, 'text': 'now you can see the black image, and on our black image the line is drawn,', 'start': 3830.504, 'duration': 6.626}, {'end': 3844.055, 'text': 'the arrowed line is drawn and the text and the circle and the rectangle are drawn here.', 'start': 3837.13, 'duration': 6.925}, {'end': 3849.416, 'text': 'So this is how you can draw different geometric shapes on your image.', 'start': 3844.355, 'duration': 5.061}, {'end': 3861.239, 'text': 'There are several other methods you can use for example CV2.polyline method or CV2.eclipse method to draw eclipse and polygon on your image.', 'start': 3849.936, 'duration': 11.303}, {'end': 3867.181, 'text': 'So just try those method to draw different shapes on your image.', 'start': 3861.62, 'duration': 5.561}, {'end': 3874.665, 'text': 'So in this video, we will see how to set some properties to our captured images.', 'start': 3867.58, 'duration': 7.085}, {'end': 3886.613, 'text': 'So in the video capture lesson we have seen that when we create a cap variable using the video capture class,', 'start': 3875.245, 'duration': 11.368}, {'end': 3891.236, 'text': 'we can get many properties using the cap.get method.', 'start': 3886.613, 'duration': 4.623}, {'end': 3896.86, 'text': 'So we were able to get the width of the frame and the height of the frame.', 'start': 3891.776, 'duration': 5.084}, {'end': 3904.302, 'text': 'Similarly, we can use the cap.set function to set some values.', 'start': 3897.7, 'duration': 6.602}, {'end': 3911.424, 'text': 'So you can just write cap.set and then you can set the values of the property.', 'start': 3904.822, 'duration': 6.602}, {'end': 3921.327, 'text': 'Generally, all the properties which you can read like this, you can also able to set those property using the set method.', 'start': 3911.944, 'duration': 9.383}, {'end': 3925.668, 'text': 'Now this notation you can also give in the form of numbers.', 'start': 3921.967, 'duration': 3.701}, {'end': 3930.509, 'text': 'So every property here has a defined number.', 'start': 3925.728, 'duration': 4.781}, {'end': 3941.872, 'text': 'So for example, instead of using cv2.cap prop underscore frame width, you can just write 3 here and that will work also.', 'start': 3930.549, 'duration': 11.323}, {'end': 3945.853, 'text': 'So every property has a number associated with it.', 'start': 3941.952, 'duration': 3.901}, {'end': 3952.876, 'text': "So, using that number, either you can just let's say, we want to set the width and height.", 'start': 3946.773, 'duration': 6.103}, {'end': 3962.421, 'text': 'either you can write this as the first argument and the second argument is the actual width you want in the video right?', 'start': 3952.876, 'duration': 9.545}, {'end': 3968.884, 'text': 'Or you can just give the number of that property and then give its value.', 'start': 3963.121, 'duration': 5.763}, {'end': 3976.81, 'text': "So let's say we want to change the width of this video to, let's say, 1208.", 'start': 3969.364, 'duration': 7.446}, {'end': 3980.973, 'text': "And then let's just set the height, so cap.set.", 'start': 3976.81, 'duration': 4.163}, {'end': 3986.618, 'text': 'And the associated number for the height parameter will be 4.', 'start': 3981.854, 'duration': 4.764}, {'end': 3990.281, 'text': 'So 3 for width and 4 for the height.', 'start': 3986.618, 'duration': 3.663}, {'end': 3996.065, 'text': "And let's say we want to just move it to 720.", 'start': 3990.701, 'duration': 5.364}, {'end': 4000.888, 'text': 'And then we will once again print the value of the width and height.', 'start': 3996.065, 'duration': 4.823}, {'end': 4007.933, 'text': 'And this time we are going to just give their associated numbers, which is three and four.', 'start': 4001.309, 'duration': 6.624}, {'end': 4010.035, 'text': "So let's run this program.", 'start': 4008.674, 'duration': 1.361}, {'end': 4014.338, 'text': 'You might already know this program, what this program is doing.', 'start': 4010.055, 'duration': 4.283}, {'end': 4021.603, 'text': "So it's just capturing the video from your default device at index zero.", 'start': 4014.778, 'duration': 6.825}, {'end': 4026.228, 'text': "then it's just showing all the frames.", 'start': 4022.484, 'duration': 3.744}, {'end': 4030.192, 'text': 'using this, I am show method in a window.', 'start': 4026.228, 'duration': 3.964}, {'end': 4034.797, 'text': "so now I'm going to run this script and let's see what happens.", 'start': 4030.192, 'duration': 4.605}, {'end': 4040.363, 'text': 'so when I run the script you can see the size of this frame is changed.', 'start': 4034.797, 'duration': 5.566}, {'end': 4050.736, 'text': "So let's see in the terminal also you can see before the original size of the video we are capturing is 640 and 480..", 'start': 4040.803, 'duration': 9.933}, {'end': 4058.246, 'text': 'So width was 640 and the height is 480.', 'start': 4050.736, 'duration': 7.51}, {'end': 4068.796, 'text': 'Now once we have changed the width and height, you can see the width is changed to 1280 and the height is changed to 720.', 'start': 4058.246, 'duration': 10.55}, {'end': 4080.747, 'text': 'So even if I have given here 1208, the default camera will automatically set its value according to its resolution.', 'start': 4068.796, 'duration': 11.951}], 'summary': 'Demonstration of drawing shapes and setting properties in opencv, including changing color and creating images using numpy zeros method.', 'duration': 360.917, 'max_score': 3719.83, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ3719830.jpg'}, {'end': 4040.363, 'src': 'embed', 'start': 4014.778, 'weight': 3, 'content': [{'end': 4021.603, 'text': "So it's just capturing the video from your default device at index zero.", 'start': 4014.778, 'duration': 6.825}, {'end': 4026.228, 'text': "then it's just showing all the frames.", 'start': 4022.484, 'duration': 3.744}, {'end': 4030.192, 'text': 'using this, I am show method in a window.', 'start': 4026.228, 'duration': 3.964}, {'end': 4034.797, 'text': "so now I'm going to run this script and let's see what happens.", 'start': 4030.192, 'duration': 4.605}, {'end': 4040.363, 'text': 'so when I run the script you can see the size of this frame is changed.', 'start': 4034.797, 'duration': 5.566}], 'summary': 'Captures video from default device, shows all frames, and changes frame size.', 'duration': 25.585, 'max_score': 4014.778, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ4014778.jpg'}, {'end': 4195.914, 'src': 'embed', 'start': 4165.993, 'weight': 1, 'content': [{'end': 4169.237, 'text': 'so let me just close this window.', 'start': 4165.993, 'duration': 3.244}, {'end': 4171.68, 'text': 'so this is how you can set some values.', 'start': 4169.237, 'duration': 2.443}, {'end': 4176.584, 'text': 'so there are many values you can set using this set method.', 'start': 4171.68, 'duration': 4.904}, {'end': 4183.546, 'text': 'you just need to go to the documentation and then search for the value you want to set.', 'start': 4176.584, 'duration': 6.962}, {'end': 4195.914, 'text': 'so in the last two videos we have seen how to capture videos from our default camera device or how to add geometric shapes on the images.', 'start': 4183.546, 'duration': 12.368}], 'summary': 'Demonstrates setting values using the set method and capturing videos from default camera device or adding geometric shapes on images.', 'duration': 29.921, 'max_score': 4165.993, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ4165993.jpg'}], 'start': 2576.908, 'title': 'Video processing with opencv', 'summary': 'Covers capturing, displaying, and saving videos using opencv, with a resolution of 640x480 and resulting in the output.avi file, along with examples of changing line color, drawing geometric shapes, and adding text on live video.', 'chapters': [{'end': 2752.436, 'start': 2576.908, 'title': 'Video capture and saving', 'summary': 'Covers how to capture and save video frames from the default camera, including details on setting the output file name, 4cc code for video codec, and the number of frames per second.', 'duration': 175.528, 'highlights': ['The 4cc code is a 4 byte code used to specify the video codec, and the chapter provides guidance on obtaining the 4cc code and setting it for the VideoWriter class.', "The chapter explains how to set the output file name for the captured video frames, with an example using the name 'output.avi'.", 'The chapter also demonstrates how to specify the number of frames per second for the captured video, with an example of setting it to 20 frames per second.']}, {'end': 2964.841, 'start': 2752.776, 'title': 'Video processing with opencv', 'summary': 'Demonstrates how to read, display, and save videos using opencv, capturing frames at 640x480 resolution, and saving the video in its original format, resulting in the output.avi file.', 'duration': 212.065, 'highlights': ['The script captures video at a resolution of 640x480 using a tuple format, processing frames using a loop and checking for frame availability before saving, resulting in efficient video processing.', 'The video is saved in its original BGR mode, and the output.avi file is successfully created and verified by playing it with VLC media player, demonstrating successful video saving and playback.', 'The chapter also covers drawing geometric shapes using OpenCV, with code explained for reading an image, displaying it in a window, and waiting for a closing event, providing a comprehensive overview of image processing with OpenCV.']}, {'end': 3234.754, 'start': 2964.841, 'title': 'Drawing geometric shapes on images', 'summary': 'Demonstrates how to draw lines on an image using the cv2 library, specifying coordinates, color in bgr format, and adjusting thickness, achieving a visible red line on the image.', 'duration': 269.913, 'highlights': ['The chapter explains the process of drawing a line on an image using the cv2 library, involving specifying starting and ending coordinates, color in BGR format, and thickness, resulting in a visible line on the image.', 'It highlights that the BGR format is used for specifying color, where the first channel represents blue, the second represents green, and the third represents the red channel.', 'It explains the impact of adjusting the thickness parameter on the drawn line, allowing for customization and variation in line appearance.']}, {'end': 3417.458, 'start': 3234.774, 'title': 'Opencv: line and shape drawing', 'summary': 'Demonstrates how to change line color and draw arrowed lines and rectangles using opencv, with examples of color channels and coordinate points, achieving straight lines and rectangles of specified dimensions.', 'duration': 182.684, 'highlights': ['The chapter demonstrates how to change line color using color channels, with examples of 147, 96, and 44 as channel values.', "It explains the process of drawing arrowed lines, showcasing the use of the 'arrowed line' function and altering its color to blue.", "The tutorial illustrates the drawing of a rectangle by overwriting on the same image, utilizing the 'CV2.rectangle' method and specifying the top-left and lower-right vertex coordinates as 384, 0 and 510, 128."]}, {'end': 3827.122, 'start': 3417.458, 'title': 'Opencv drawing and text', 'summary': 'Covers drawing shapes like rectangle and circle with specified color and thickness, changing the color of text, and creating an image using numpy zeros method, focusing on code demonstration and its visual output.', 'duration': 409.664, 'highlights': ['Drawing shapes like rectangle and circle with specified color and thickness The chapter demonstrates drawing a rectangle with red color and thickness 5, adjusting the thickness of the rectangle, and filling the rectangle by providing a value of minus 1.', "Changing the color of text The method putText is used to print 'OpenCV' on the image with specified font, font size, color, and thickness, and the color of the text can be changed by modifying the RGB values.", 'Creating an image using numpy zeros method The process of creating a black image of size 512 by 512 using numpy zeros method is explained, emphasizing the use of numpy module and specifying the height, width, and data type.']}, {'end': 4165.993, 'start': 3827.122, 'title': 'Setting image properties with opencv', 'summary': 'Demonstrates how to draw geometric shapes and set properties such as width and height of captured images using opencv, with examples of method usage and the impact on image resolution.', 'duration': 338.871, 'highlights': ['The chapter explains how to draw different geometric shapes on an image using OpenCV, including lines, arrows, text, circles, and rectangles.', 'It also details other methods like CV2.polyline and CV2.ellipse for drawing polygons and ellipses on images, encouraging experimentation with these methods.', 'The usage of cap.get method to retrieve properties of captured images, such as width and height, and the cap.set method to set these values, is demonstrated.', 'It mentions the association of defined numbers with properties, allowing the use of numbers instead of property names, and the capability to set properties using these numbers.', 'The impact of setting image properties is illustrated through examples, where changing the width and height values results in a change in the resolution of the captured video frames.']}, {'end': 4442.044, 'start': 4165.993, 'title': 'Adding text on live video', 'summary': "Demonstrates how to overlay the width and height information on a live video using opencv's puttext method, with a specific focus on combining previous knowledge from the last two videos.", 'duration': 276.051, 'highlights': ["The chapter demonstrates how to overlay the width and height information on a live video using OpenCV's putText method, with a specific focus on combining previous knowledge from the last two videos.", 'The video recommends watching the last two videos before proceeding, emphasizing the integration of knowledge from previous tutorials.', "The tutorial provides detailed steps on using OpenCV's putText method to overlay text, including defining the font, text content, coordinates, font scale, thickness, and color.", "The method CV2.putText is utilized for overlaying text on the video frame, with the specific font 'CV2.font Hershey_simplex' being defined for this purpose.", 'The tutorial explains the process of defining and formatting the text to display width and height information on the live video, utilizing concatenation and conversion of integer values to strings.']}], 'duration': 1865.136, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ2576908.jpg', 'highlights': ['The script captures video at a resolution of 640x480 using a tuple format, resulting in efficient video processing.', "The chapter demonstrates how to overlay the width and height information on a live video using OpenCV's putText method.", 'The chapter explains how to draw different geometric shapes on an image using OpenCV, including lines, arrows, text, circles, and rectangles.', 'The chapter provides guidance on obtaining the 4cc code and setting it for the VideoWriter class.', 'The chapter demonstrates how to change line color using color channels, with examples of 147, 96, and 44 as channel values.', 'The chapter explains the process of drawing a line on an image using the cv2 library, involving specifying starting and ending coordinates, color in BGR format, and thickness.', 'The chapter also covers drawing geometric shapes using OpenCV, with code explained for reading an image, displaying it in a window, and waiting for a closing event.']}, {'end': 6627.049, 'segs': [{'end': 5325.928, 'src': 'embed', 'start': 5291.493, 'weight': 3, 'content': [{'end': 5298.255, 'text': 'so now you can see the black image which is created by numpy zeros method,', 'start': 5291.493, 'duration': 6.762}, {'end': 5309.02, 'text': "and when i click on this image anywhere you can see the coordinates of the position where i've clicked is printed here.", 'start': 5298.255, 'duration': 10.765}, {'end': 5311.02, 'text': "so let's click here.", 'start': 5309.02, 'duration': 2}, {'end': 5317.323, 'text': 'you can see when i give this left down button click event.', 'start': 5311.02, 'duration': 6.303}, {'end': 5325.928, 'text': 'then the position of the x and y coordinate is printed on this black image.', 'start': 5317.323, 'duration': 8.605}], 'summary': 'Demonstration of numpy zeros method creating black image and printing x and y coordinates on click event.', 'duration': 34.435, 'max_score': 5291.493, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ5291493.jpg'}, {'end': 6116.517, 'src': 'embed', 'start': 6088.139, 'weight': 0, 'content': [{'end': 6097.043, 'text': "That's why we have taken this minus one and minus two argument, which means the last element of the array and the second last element of the array.", 'start': 6088.139, 'duration': 8.904}, {'end': 6104.747, 'text': 'So when I click at any point, it will be now connected with this blue line.', 'start': 6097.603, 'duration': 7.144}, {'end': 6116.517, 'text': 'So this kind of line drawing you can use in satellite images where you want to connect two points together with the line.', 'start': 6105.467, 'duration': 11.05}], 'summary': 'Using minus one and minus two argument to connect points with blue lines in array data.', 'duration': 28.378, 'max_score': 6088.139, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ6088139.jpg'}], 'start': 4442.044, 'title': 'Using opencv for image and video manipulation', 'summary': 'Covers adding text and date to video, handling mouse events, mouse callbacks, image analysis, and mouse click events in opencv, providing practical examples and code explanations.', 'chapters': [{'end': 4638.481, 'start': 4442.044, 'title': 'Adding text and date to video', 'summary': "Demonstrates how to add text and current date/time to a video using python's opencv library. it explains the process of displaying text with specific attributes and then adding the current date and time to the video.", 'duration': 196.437, 'highlights': ["The chapter demonstrates the process of displaying text on a video using Python's OpenCV library, with an example of showing the width and height on the video, which is 1280 and 720.0.", 'It explains how to add the current date and time to the video by importing the DateTime package in Python and using the datetime.now() method to display the current date and time on the video.']}, {'end': 5110.512, 'start': 4638.501, 'title': 'Handling mouse events in opencv', 'summary': 'Covers how to handle different mouse events, such as right click, left button click, and double click in opencv, including creating a callback function to display x and y coordinates on the image and putting text on the image.', 'duration': 472.011, 'highlights': ['Different mouse events available in cv2 package are right click event, left mouse button click event, and left button double click event. The cv2 package provides various mouse events such as right click event, left mouse button click event, and left button double click event.', 'Creating a mouse callback function to display x and y coordinates on the image when a mouse event occurs. A mouse callback function is created to display x and y coordinates on the image when a mouse event takes place.', 'Using CV2.putText to put text on the image with specified font, color, and thickness. The method CV2.putText is used to put text on the image with specified font, color (e.g., 255, 255, 0), and thickness.']}, {'end': 5391.847, 'start': 5110.552, 'title': 'Opencv mouse callback', 'summary': 'Explains how to use opencv methods like iamshow, setmousecallback, waitkey, and destroyallwindows to create a black image, handle mouse events, and display the coordinates of the clicked position on the image.', 'duration': 281.295, 'highlights': ['The chapter demonstrates using OpenCV methods like IamShow, setMouseCallback, waitKey, and destroyAllWindows to handle mouse events and display the coordinates of the clicked position on the image.', 'The code creates a black image using numpy zeros method with a size of 512x512 and 3 channels, and the data type as np.uint8.', 'The callback function click event function is called when a mouse click event occurs on the displayed image, capturing and printing the coordinates of the position clicked.']}, {'end': 5598.013, 'start': 5392.347, 'title': 'Opencv image analysis', 'summary': 'Explains how to display and analyze bgr channels of an image using opencv, demonstrating the process with code examples and practical results.', 'duration': 205.666, 'highlights': ['Explaining the process of finding and printing the blue, green, and red channels of an image using OpenCV, with practical examples and code demonstration.', 'Using the CV2 library to read the Lena image and display its BGR channels, showcasing the practical application of the code.', 'Detailing the process of obtaining and displaying the BGR channels of an image, providing specific examples and practical outcomes.']}, {'end': 6116.517, 'start': 5598.013, 'title': 'Mouse click event in opencv', 'summary': 'Demonstrates the usage of mouse click events in opencv using python, including drawing points and connecting them with lines, and provides a clear explanation of the code and visual representation of the functionality.', 'duration': 518.504, 'highlights': ['The chapter demonstrates the usage of mouse click events in OpenCV using Python The transcript covers the demonstration of using mouse click events in OpenCV using Python to create a callback function and utilize the setMouseCallback method.', 'Drawing points and connecting them with lines The chapter illustrates drawing small circles upon left button click events and connecting the points with lines upon subsequent clicks, providing a visual representation and explanation of the process.', 'Explanation of the code and visual representation of the functionality The transcript provides a detailed explanation of the code, including the usage of CV2 methods to draw circles and lines, and visually demonstrates the creation of points and their connection with lines on a colored image.']}, {'end': 6627.049, 'start': 6116.937, 'title': 'Opencv mouse click event', 'summary': 'Demonstrates how to use opencv to read an image, capture mouse click events, extract bgr channels, create a color image, and display the color of the clicked point in a new window, showcasing practical examples and relevant methods.', 'duration': 510.112, 'highlights': ['The chapter demonstrates practical examples of using OpenCV to capture mouse click events, extract BGR channels, create a color image, and display the color of the clicked point in a new window.', 'It explains how to read an image using the IAMread method, capture mouse click events, extract BGR channels, create a color image, and display the color of the clicked point in a new window.', 'The chapter provides a step-by-step explanation of using OpenCV methods to read an image, obtain BGR channels, create a color image, and display the color of the clicked point in a new window.', 'It covers practical examples of using OpenCV to demonstrate mouse click events, BGR channel extraction, color image creation, and displaying the color of the clicked point in a new window.']}], 'duration': 2185.005, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ4442044.jpg', 'highlights': ['The chapter demonstrates practical examples of using OpenCV to capture mouse click events, extract BGR channels, create a color image, and display the color of the clicked point in a new window.', "The chapter demonstrates the process of displaying text on a video using Python's OpenCV library, with an example of showing the width and height on the video, which is 1280 and 720.0.", 'Explaining the process of finding and printing the blue, green, and red channels of an image using OpenCV, with practical examples and code demonstration.', 'Different mouse events available in cv2 package are right click event, left mouse button click event, and left button double click event. The cv2 package provides various mouse events such as right click event, left mouse button click event, and left button double click event.', 'The chapter demonstrates the usage of mouse click events in OpenCV using Python The transcript covers the demonstration of using mouse click events in OpenCV using Python to create a callback function and utilize the setMouseCallback method.', 'The chapter demonstrates using OpenCV methods like IamShow, setMouseCallback, waitKey, and destroyAllWindows to handle mouse events and display the coordinates of the clicked position on the image.']}, {'end': 8230.925, 'segs': [{'end': 7124.058, 'src': 'embed', 'start': 7094.168, 'weight': 3, 'content': [{'end': 7107.443, 'text': 'okay. so in order to add two images, you need to have the images or the arrays of same size, and then only you will be able to add those two images.', 'start': 7094.168, 'duration': 13.275}, {'end': 7115.01, 'text': "so let's resize those two images into a size which is common to both of them.", 'start': 7107.443, 'duration': 7.567}, {'end': 7120.295, 'text': 'So what we are going to do next is we are going to resize those images.', 'start': 7115.511, 'duration': 4.784}, {'end': 7124.058, 'text': "So once again, I'm going to just use img variable.", 'start': 7120.315, 'duration': 3.743}], 'summary': 'To add two images, they must be of the same size. we are resizing the images to make them compatible.', 'duration': 29.89, 'max_score': 7094.168, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ7094168.jpg'}, {'end': 7484.403, 'src': 'embed', 'start': 7456.751, 'weight': 2, 'content': [{'end': 7465.297, 'text': 'So in this video you have seen some of the basic operations on the images and some of the arithmetic operations on the images,', 'start': 7456.751, 'duration': 8.546}, {'end': 7467.719, 'text': 'which you can do using OpenCV.', 'start': 7465.297, 'duration': 2.422}, {'end': 7476.261, 'text': 'in this video we will talk about bitwise operations on images using python and opencv.', 'start': 7468.499, 'duration': 7.762}, {'end': 7482.002, 'text': 'so bitwise operations can be very useful when working with masks.', 'start': 7476.261, 'duration': 5.741}, {'end': 7484.403, 'text': 'masks are binary images.', 'start': 7482.002, 'duration': 2.401}], 'summary': 'Basic and bitwise image operations using opencv in python.', 'duration': 27.652, 'max_score': 7456.751, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ7456751.jpg'}, {'end': 7944.841, 'src': 'embed', 'start': 7909.606, 'weight': 0, 'content': [{'end': 7923.61, 'text': "So for that I'm going to just instead of writing bit and I'm going to just write bit or and instead of bitwise and we are going to just write bitwise or here.", 'start': 7909.606, 'duration': 14.004}, {'end': 7930.352, 'text': 'And then we will simply call this image using I am sure method.', 'start': 7924.351, 'duration': 6.001}, {'end': 7934.254, 'text': 'So we are just calling here bit or.', 'start': 7930.372, 'duration': 3.882}, {'end': 7940.017, 'text': "Now let's run the code once again and let's see the result.", 'start': 7935.874, 'duration': 4.143}, {'end': 7942.979, 'text': 'So you can see the result here.', 'start': 7940.818, 'duration': 2.161}, {'end': 7944.841, 'text': "So let's see the truth table.", 'start': 7943.059, 'duration': 1.782}], 'summary': 'Using bitwise operations, the code executed successfully, resulting in a truth table.', 'duration': 35.235, 'max_score': 7909.606, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ7909606.jpg'}], 'start': 6627.049, 'title': 'Image processing techniques', 'summary': 'Covers image splitting and merging, working with regions of interest (roi), adding two images using opencv, and bitwise operations on images with python and opencv, including the use of logical and, or, xor, and not operations, and their applications in image processing.', 'chapters': [{'end': 7212.701, 'start': 6627.049, 'title': 'Image processing techniques', 'summary': 'Covers image splitting and merging, working with regions of interest (roi), and adding two images using opencv, including the importance of resizing images to matching dimensions for addition.', 'duration': 585.652, 'highlights': ['The chapter covers the concepts of region of interest (ROI) and how to work with certain regions of an image, such as copying and placing a ball in a picture.', 'The method of adding two images using OpenCV is demonstrated, emphasizing the requirement of images or arrays to be of the same size for successful addition.', 'The process of resizing images to the same dimensions using cv2.resize method is explained to ensure compatibility for adding two images.', 'The importance of debugging and verifying the correctness of image processing methods is highlighted, emphasizing the usefulness of attributes for debugging.', 'The process of image splitting using the split method and re-merging the BGR channels using the merge method in OpenCV is demonstrated to retain the original image.', 'The significance of obtaining coordinates in an image and using NumPy indexing features for image manipulation is explained to copy and place a ball at a specific coordinate.']}, {'end': 7456.691, 'start': 7213.261, 'title': 'Adding images with weight in opencv', 'summary': 'Explains the use of the add weighted method in opencv for adding two images with specific weights, such as 90% to the first image and 10% to the second, resulting in a dominant image and a lighter image respectively.', 'duration': 243.43, 'highlights': ['The add weighted method in OpenCV allows adding two images with specific weights, such as 90% to the first image and 10% to the second, resulting in a dominant image and a lighter image respectively.', 'The method takes several arguments including alpha (weight for the first image), beta (weight for the second image), and gamma (scalar value), providing flexibility in adjusting the weights and adding scalar values to the images.', 'Adjusting the weights and scalar values allows for controlling the dominance of each image, such as making one dominant with 80% weight while the other has 20%, or creating a balanced 50-50% dominance between the two images.']}, {'end': 7742.031, 'start': 7456.751, 'title': 'Bitwise operations on images', 'summary': 'Covers bitwise operations on images using python and opencv, explaining the use of bitwise operations for masks, creating and performing bitwise operations on images, and demonstrating the creation and display of images using numpy and opencv.', 'duration': 285.28, 'highlights': ['The chapter covers bitwise operations on images using Python and OpenCV This is the main topic of the chapter.', 'Explaining the use of bitwise operations for masks Highlights the importance of masks in performing operations on specific pixels of an image.', 'Creating and performing bitwise operations on images Describes the process of creating and executing bitwise operations on images using OpenCV and NumPy.', 'Demonstrating the creation and display of images using NumPy and OpenCV Shows the practical implementation of creating and displaying images using NumPy and OpenCV.']}, {'end': 8230.925, 'start': 7742.071, 'title': 'Bitwise operations on images', 'summary': 'Explains the logical and, or, xor, and not operations on images, demonstrating their truth tables and resulting images, illustrating how the logical operations work and their applications in image processing.', 'duration': 488.854, 'highlights': ['The logical AND operation on black and black results in black, while white and black also results in black, and only the combination of white and white results in white, demonstrated by the truth table and image examples. The logical AND operation results in black when applied to black and black, and also to white and black, while it results in white when applied to white and white.', 'The logical OR operation results in white when either input is white, while both inputs being black results in black, demonstrated by the truth table and image examples. The logical OR operation results in white when either input is white, while both inputs being black results in black.', 'The XOR operation produces white when the inputs are black and white, demonstrating its functionality through the truth table and image examples. The XOR operation results in white when the inputs are black and white, while it produces black for black and black or white and white inputs.', 'The bitwise NOT operation produces the opposite of the input, turning white into black and black into white, as shown in the resulting images. The bitwise NOT operation produces the opposite of the input, turning white into black and black into white, demonstrated by the resulting images.']}], 'duration': 1603.876, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ6627049.jpg', 'highlights': ['The chapter covers bitwise operations on images using Python and OpenCV, which is the main topic of the chapter.', 'The method of adding two images using OpenCV is demonstrated, emphasizing the requirement of images or arrays to be of the same size for successful addition.', 'The process of image splitting using the split method and re-merging the BGR channels using the merge method in OpenCV is demonstrated to retain the original image.', 'The logical AND operation on black and black results in black, while white and black also results in black, and only the combination of white and white results in white, demonstrated by the truth table and image examples.']}, {'end': 9262.634, 'segs': [{'end': 8713.174, 'src': 'embed', 'start': 8689.76, 'weight': 0, 'content': [{'end': 8698.405, 'text': 'G, R that means we want to set the current BGR values to this image.', 'start': 8689.76, 'duration': 8.645}, {'end': 8701.767, 'text': "So let's run this code and let's see what happens now.", 'start': 8699.005, 'duration': 2.762}, {'end': 8713.174, 'text': "So I'm going to run this code and now, when I change the blue channel values, you can see this image becomes blue colored, right?", 'start': 8701.847, 'duration': 11.327}], 'summary': 'Setting bgr values changes image color to blue', 'duration': 23.414, 'max_score': 8689.76, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ8689760.jpg'}, {'end': 9012.129, 'src': 'embed', 'start': 8917.837, 'weight': 1, 'content': [{'end': 8923.66, 'text': 'As soon as we change the switch to 1, that means we want to change the BGR values.', 'start': 8917.837, 'duration': 5.823}, {'end': 8928.703, 'text': 'You can see this color is changed inside the image.', 'start': 8924.1, 'duration': 4.603}, {'end': 8933.665, 'text': 'So the 0 is just like off switch.', 'start': 8929.203, 'duration': 4.462}, {'end': 8939.429, 'text': "So we don't want to change any color and 1 is like on switch.", 'start': 8933.726, 'duration': 5.703}, {'end': 8945.792, 'text': "So when it's 1, the value of RBG channels can be changed.", 'start': 8939.509, 'duration': 6.283}, {'end': 8949.394, 'text': 'now i want to give one more example of trackbar to use.', 'start': 8946.212, 'duration': 3.182}, {'end': 8960.12, 'text': "so that's why i have created one more file, which is python opencv trackbar, example 2, and this time i'm going to use just two trackbars here.", 'start': 8949.394, 'duration': 10.726}, {'end': 8963.983, 'text': "so that's why i'm going to delete some of the code here.", 'start': 8960.12, 'duration': 3.863}, {'end': 8974.289, 'text': "so using the first track bar, let's say i want to just change some values inside our image and i want to print that value on that image.", 'start': 8964.543, 'duration': 9.746}, {'end': 8977.931, 'text': "so let's say now our range is between 10 to 400.", 'start': 8974.289, 'duration': 3.642}, {'end': 8980.793, 'text': 'okay, so the lower range is 10 and the upper range is 400.', 'start': 8977.931, 'duration': 2.862}, {'end': 9004.798, 'text': 'and using this track bar i want to print the current value on our image and also i want to have a switch which i can toggle and i want to change the color of the image from the colored value or colored image to the grayscale image.', 'start': 8980.793, 'duration': 24.005}, {'end': 9012.129, 'text': 'So now our switch is between color to the gray scale image.', 'start': 9007.386, 'duration': 4.743}], 'summary': 'Setting trackbar values to change color and image, using switch to toggle grayscale.', 'duration': 94.292, 'max_score': 8917.837, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ8917837.jpg'}], 'start': 8231.505, 'title': 'Using trackbars and image processing in opencv', 'summary': 'Explains how to use trackbars to dynamically change image values at runtime, including creating trackbars for bgr values and using callback functions. it also covers manipulating bgr channel values, controlling image color changes, and converting colored images to grayscale, demonstrated through python code.', 'chapters': [{'end': 8643.375, 'start': 8231.505, 'title': 'Using trackbars in opencv', 'summary': 'Explains how to use trackbars in opencv to dynamically change image values at runtime, including creating trackbars for bgr values and using callback functions to display and update current trackbar positions.', 'duration': 411.87, 'highlights': ['Creating trackbars for BGR values The chapter explains how to create trackbars for BGR values in an OpenCV window, allowing the user to change the BGR channel values from 0 to 255.', 'Using callback functions to display current trackbar positions The chapter demonstrates using callback functions to print the current position of the trackbar whenever its value changes, enabling users to see the corresponding value for each trackbar.', "Using CV2 method to get trackbar position The chapter explains how to use the CV2 method 'getTrackbarPos' to retrieve the current position of a trackbar by providing the trackbar name and the name of the window."]}, {'end': 9012.129, 'start': 8643.415, 'title': 'Using trackbars in opencv', 'summary': 'Discusses the usage of trackbars in opencv to manipulate bgr channel values and control image color changes, with examples of adding a switch using a trackbar and modifying image values and color mode.', 'duration': 368.714, 'highlights': ['The chapter demonstrates how to use trackbars in OpenCV to manipulate BGR channel values, with examples of changing the BGR values to alter the image color, showcasing the functionality and impact of the trackbars on the image.', 'It explains the addition of a switch using a trackbar, enabling the control of image color changes by toggling between color and grayscale modes through the trackbar, depicting the functionality and visual impact of the switch on the image.', 'The chapter also presents an example of utilizing two trackbars to modify image values and toggle between colored and grayscale image modes, illustrating the range of values, the effect on the image, and the switch functionality.', 'The transcript provides a comprehensive guide on employing trackbars in OpenCV for manipulating image properties and color modes, emphasizing practical examples and their impact on image appearance and functionality.']}, {'end': 9262.634, 'start': 9012.249, 'title': 'Opencv image processing', 'summary': 'Discusses how to use opencv to display an image, trackbar, and switch in a window, along with converting a colored image to grayscale and handling errors, as demonstrated through python code.', 'duration': 250.385, 'highlights': ['The chapter demonstrates how to display an image, trackbar, and switch in an OpenCV window, along with converting a colored image to grayscale using Python code.', 'The code uses the CV2 library to read an image file (lena.jpg) and display it in the OpenCV window for processing.', 'It explains the process of handling errors within the code, specifically noting the necessity of reading the image inside a while loop to avoid errors during execution.', "The chapter details the use of the CV2 method 'cvtColor' to convert a colored image to a grayscale image, providing a visual representation of the color-to-grayscale transformation.", "The code utilizes the CV2 method 'putText' to display the current position of the trackbar on the image, employing parameters such as font, color, and position."]}], 'duration': 1031.129, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ8231504.jpg', 'highlights': ['Creating trackbars for BGR values in an OpenCV window, allowing the user to change the BGR channel values from 0 to 255.', 'Using callback functions to print the current position of the trackbar whenever its value changes, enabling users to see the corresponding value for each trackbar.', 'The chapter demonstrates how to use trackbars in OpenCV to manipulate BGR channel values, with examples of changing the BGR values to alter the image color.', 'Explains the addition of a switch using a trackbar, enabling the control of image color changes by toggling between color and grayscale modes through the trackbar.', 'Demonstrates how to display an image, trackbar, and switch in an OpenCV window, along with converting a colored image to grayscale using Python code.']}, {'end': 10437.876, 'segs': [{'end': 9400.199, 'src': 'embed', 'start': 9365.98, 'weight': 2, 'content': [{'end': 9371.442, 'text': 'So H stands for hue, S for saturation and V for the value.', 'start': 9365.98, 'duration': 5.462}, {'end': 9380.645, 'text': 'Now generally RGB in RGB color space are all correlated to the color luminance.', 'start': 9372.262, 'duration': 8.383}, {'end': 9384.426, 'text': 'That is what we loosely call intensity.', 'start': 9381.185, 'duration': 3.241}, {'end': 9390.148, 'text': 'In other words, we cannot separate color information from luminance.', 'start': 9385.066, 'duration': 5.082}, {'end': 9400.199, 'text': 'So HSV or hue saturation value is used to separate image luminance from color information.', 'start': 9390.848, 'duration': 9.351}], 'summary': 'Hsv separates image luminance from color info', 'duration': 34.219, 'max_score': 9365.98, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ9365980.jpg'}, {'end': 9566.117, 'src': 'embed', 'start': 9541.36, 'weight': 3, 'content': [{'end': 9548.586, 'text': "And now let's see how we can use this HSV color space to detect an object in an image.", 'start': 9541.36, 'duration': 7.226}, {'end': 9557.012, 'text': 'So here I have this simple code to load an image using IAM read method and show it inside a window.', 'start': 9548.966, 'duration': 8.046}, {'end': 9561.235, 'text': 'So by now you might already know how this code works.', 'start': 9557.092, 'duration': 4.143}, {'end': 9566.117, 'text': "so let's run this code and let's see what does this code do.", 'start': 9561.235, 'duration': 4.882}], 'summary': 'Using hsv color space to detect objects in images.', 'duration': 24.757, 'max_score': 9541.36, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ9541360.jpg'}, {'end': 9797.45, 'src': 'embed', 'start': 9768.953, 'weight': 0, 'content': [{'end': 9780.063, 'text': "let's say so i'm going to just define a variable called mask here and then i'm going to use cv2 dot in range method,", 'start': 9768.953, 'duration': 11.11}, {'end': 9792.348, 'text': 'where i will provide first of all my hsv variable or image and then i will provide the upper and lower range for this function.', 'start': 9780.063, 'duration': 12.285}, {'end': 9797.45, 'text': 'so my lower range is this numpy array for the blue color.', 'start': 9792.348, 'duration': 5.102}], 'summary': "Defining a variable 'mask' using cv2.inrange method for blue color.", 'duration': 28.497, 'max_score': 9768.953, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ9768953.jpg'}], 'start': 9262.634, 'title': 'Using track bars in opencv', 'summary': 'Demonstrates the use of track bars in opencv to dynamically change the color and appearance of an image, with examples of changing the color format from colored to grayscale and adjusting font size and thickness, showcasing the practical application of track bars in opencv. it also introduces the concept of hsv color space, explaining its components (hue, saturation, value), and demonstrates the use of hsv color space to detect and isolate specific colors in an image using opencv, with over 150 color space conversion methods available in opencv. additionally, it explains how to utilize track bars to set lower and upper hsv values for object detection and tracking, demonstrating the process with blue and green colored balls, enabling easy adjustment and refinement of the object detection.', 'chapters': [{'end': 9331.848, 'start': 9262.634, 'title': 'Using track bars in opencv', 'summary': 'Demonstrates the use of track bars in opencv to dynamically change the color and appearance of an image, with examples of changing the color format from colored to grayscale and adjusting font size and thickness, showcasing the practical application of track bars in opencv.', 'duration': 69.214, 'highlights': ['The chapter demonstrates the use of track bars in OpenCV to dynamically change the color and appearance of an image, showcasing the practical application of track bars in OpenCV.', 'The value of CP is printed on the image as 10, and changing the value reflects the changes on the image as well.', 'Changing the value from 0 to 1 converts the image from colored to grayscale, demonstrating the dynamic nature of track bars in OpenCV.', 'The chapter also showcases the ability to change font size and thickness using track bars to improve the visualization of the image, with an example of changing the font size from 6 to 10.']}, {'end': 10060.915, 'start': 9331.848, 'title': 'Introduction to hsv color space', 'summary': 'Introduces the concept of hsv color space, explaining its components (hue, saturation, value), and demonstrates the use of hsv color space to detect and isolate specific colors in an image using opencv, with over 150 color space conversion methods available in opencv.', 'duration': 729.067, 'highlights': ["Introduction to HSV Color Space The HSV color space is introduced, explaining the components 'hue, saturation, value', and highlighting its use for separating color information from luminance, with over 150 color space conversion methods available in OpenCV.", 'Object Detection using HSV Color Space Demonstrates the use of HSV color space to detect and isolate specific colors in an image, showcasing the process of converting a colored image to an HSV image and then using thresholding to detect and isolate blue colored balls, with the potential to detect other colored balls as well.', 'Adjusting Lower and Upper Boundaries Using Track Bar Explains the usage of track bar to adjust lower and upper boundaries of HSV values for detecting specific colors, demonstrating the creation of track bars for adjusting lower hue values and the potential for adjusting lower and upper boundaries for any color.']}, {'end': 10437.876, 'start': 10061.255, 'title': 'Object detection and tracking with hsv values', 'summary': 'Explains how to utilize track bars to set lower and upper hsv values for object detection and tracking, demonstrating the process with blue and green colored balls, enabling easy adjustment and refinement of the object detection.', 'duration': 376.621, 'highlights': ['The chapter details the use of track bars to set lower and upper HSV values for object detection and tracking, providing a practical example of detecting blue and green colored balls and demonstrating the ease of adjustment and refinement using the track bars.', "It explains the process of capturing video input from the default camera and reading frames to track objects in a live video, highlighting the use of 'cv2.VideoCapture' and 'cap.read' methods for video input, and the 'cap.release' method to release the camera resources after use.", 'The chapter emphasizes the importance of adjusting the lower and upper HSV values using track bars to refine object detection, showcasing how the values can be manipulated to detect specific colored objects in an image and highlighting the versatility of the method for detecting objects of any color.', 'It illustrates the utilization of track bars for adjusting lower and upper HSV values, showcasing the ease of refining object detection by manipulating the track bars to detect specific colored objects and highlighting the practical application of the method for object detection and tracking.']}], 'duration': 1175.242, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ9262634.jpg', 'highlights': ['Demonstrates the use of track bars in OpenCV to dynamically change the color and appearance of an image, showcasing the practical application of track bars in OpenCV.', "Introduction to HSV Color Space explaining its components 'hue, saturation, value', and highlighting its use for separating color information from luminance, with over 150 color space conversion methods available in OpenCV.", 'Object Detection using HSV Color Space demonstrating the process of converting a colored image to an HSV image and then using thresholding to detect and isolate blue colored balls, with the potential to detect other colored balls as well.', 'The chapter details the use of track bars to set lower and upper HSV values for object detection and tracking, providing a practical example of detecting blue and green colored balls and demonstrating the ease of adjustment and refinement using the track bars.', "Explains the process of capturing video input from the default camera and reading frames to track objects in a live video, highlighting the use of 'cv2.VideoCapture' and 'cap.read' methods for video input, and the 'cap.release' method to release the camera resources after use."]}, {'end': 11809.046, 'segs': [{'end': 11514.985, 'src': 'embed', 'start': 11460.633, 'weight': 0, 'content': [{'end': 11472.987, 'text': "that's why we see half of the image which have the good illumination and we don't see half of the image which doesn't have the better illumination.", 'start': 11460.633, 'duration': 12.354}, {'end': 11478.213, 'text': "so in that case it's a better idea to use adaptive thresholding.", 'start': 11472.987, 'duration': 5.226}, {'end': 11480.977, 'text': "so let's see how we can use adaptive thresholding.", 'start': 11478.213, 'duration': 2.764}, {'end': 11491.024, 'text': "so here what i'm going to do is i'm going to declare a variable called th2 and then we use cv dot, adoptive threshold.", 'start': 11481.497, 'duration': 9.527}, {'end': 11499.43, 'text': 'so this is the method which we are going to use for performing adopting thresholding, and this takes few arguments.', 'start': 11491.024, 'duration': 8.406}, {'end': 11501.011, 'text': 'so first is the source.', 'start': 11499.43, 'duration': 1.581}, {'end': 11503.853, 'text': 'so our source is the image variable.', 'start': 11501.011, 'duration': 2.842}, {'end': 11507.096, 'text': 'now the second parameter here is the max value.', 'start': 11503.853, 'duration': 3.243}, {'end': 11514.985, 'text': 'So the max value is the non-zero value assigned to the pixels for which the condition is satisfied.', 'start': 11507.876, 'duration': 7.109}], 'summary': 'Adaptive thresholding is recommended for better illumination. using cv.adoptive threshold method with arguments source and max value.', 'duration': 54.352, 'max_score': 11460.633, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ11460633.jpg'}], 'start': 10438.416, 'title': 'Image processing techniques', 'summary': 'Covers object tracking in hsv color space, thresholding techniques in image processing, and adaptive thresholding in opencv. it includes tracking blue colored objects, various thresholding types, and implementation of adaptive thresholding, showcasing improved results.', 'chapters': [{'end': 10495.016, 'start': 10438.416, 'title': 'Hsv color space object tracking', 'summary': 'Demonstrates object tracking and detection using hsv color space, with a focus on tracking a blue colored object, resulting in successful masking and object tracking.', 'duration': 56.6, 'highlights': ['The chapter demonstrates object tracking and detection using HSV color space, with a focus on tracking a blue colored object, resulting in successful masking and object tracking.', 'The video showcases the capability to perform object tracking of any color using the HSV color space, showcasing the successful detection of the blue colored object and masking of other frame values.', 'The demonstration includes the display of the real image captured from the camera, the mask, and the result of the mask in the blue colored object tracking.']}, {'end': 11228.96, 'start': 10496.317, 'title': 'Thresholding techniques in image processing', 'summary': 'Discusses the application of thresholding techniques in image processing, where pixels are divided into two groups based on a predefined threshold value, and demonstrates various thresholding types such as binary, binary inverse, truncation, and to zero with examples and their effects on the image.', 'duration': 732.643, 'highlights': ['Thresholding involves comparing each pixel of an image with a predefined threshold value, dividing the pixels into two groups based on intensity values. The process of thresholding involves comparing each pixel of an image with a predefined threshold value, dividing the pixels into two groups based on intensity values.', 'Demonstrates the binary thresholding technique where pixels with intensity value less than the threshold are assigned 0, and pixels with intensity value greater than the threshold are assigned 255. Binary thresholding technique assigns pixels with intensity value less than the threshold to 0 and pixels with intensity value greater than the threshold to 255.', 'Illustrates the binary inverse thresholding technique, which assigns pixels with intensity value less than the threshold to 255 and pixels with intensity value greater than the threshold to 0. Binary inverse thresholding technique assigns pixels with intensity value less than the threshold to 255 and pixels with intensity value greater than the threshold to 0.', 'Explains the truncation thresholding technique, where pixels with intensity values up to the threshold remain the same, and after the threshold, the pixel value remains constant. Truncation thresholding technique maintains pixel values up to the threshold, and beyond the threshold, the pixel value remains constant.', 'Describes the to zero thresholding technique, which assigns a pixel value of 0 to pixels with intensity values less than the threshold, and retains the original pixel value for values greater than the threshold. To zero thresholding technique assigns a pixel value of 0 to pixels with intensity values less than the threshold and retains the original pixel value for values greater than the threshold.']}, {'end': 11809.046, 'start': 11228.96, 'title': 'Adaptive thresholding in opencv', 'summary': "Introduces adaptive thresholding in opencv, explaining its relevance in handling varying illumination in images, demonstrates the implementation of adaptive thresholding using two different methods, 'adaptivethreshmeanc' and 'adaptivethreshgaussianc', and showcases the improved results compared to simple thresholding techniques.", 'duration': 580.086, 'highlights': ['The chapter introduces adaptive thresholding in OpenCV, explaining its relevance in handling varying illumination in images Adaptive thresholding is introduced as a method for handling varying illumination in images, providing different threshold values for different regions, improving results in images with varying illumination.', "Demonstrates the implementation of adaptive thresholding using two different methods, 'AdaptiveThreshMeanC' and 'AdaptiveThreshGaussianC' The chapter demonstrates the implementation of adaptive thresholding using two different methods, 'AdaptiveThreshMeanC' and 'AdaptiveThreshGaussianC', to calculate threshold values based on the mean of the neighborhood area or the weighted sum of neighborhood values, respectively.", 'Showcases the improved results compared to simple thresholding techniques The chapter showcases the improved results obtained through adaptive thresholding compared to simple thresholding techniques, emphasizing the better readability and handling of varying illumination in images.']}], 'duration': 1370.63, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ10438416.jpg', 'highlights': ['The chapter demonstrates object tracking and detection using HSV color space, with a focus on tracking a blue colored object, resulting in successful masking and object tracking.', 'The chapter introduces adaptive thresholding in OpenCV, explaining its relevance in handling varying illumination in images Adaptive thresholding is introduced as a method for handling varying illumination in images, providing different threshold values for different regions, improving results in images with varying illumination.', 'The video showcases the capability to perform object tracking of any color using the HSV color space, showcasing the successful detection of the blue colored object and masking of other frame values.', 'The chapter showcases the improved results obtained through adaptive thresholding compared to simple thresholding techniques, emphasizing the better readability and handling of varying illumination in images.', 'Demonstrates the binary thresholding technique where pixels with intensity value less than the threshold are assigned 0, and pixels with intensity value greater than the threshold are assigned 255. Binary thresholding technique assigns pixels with intensity value less than the threshold to 0 and pixels with intensity value greater than the threshold to 255.']}, {'end': 13951.359, 'segs': [{'end': 12210.175, 'src': 'embed', 'start': 12176.514, 'weight': 4, 'content': [{'end': 12190.303, 'text': "so I'm going to just write img is equal to CV2 dot, CVT color, and then i'm going to convert this image from bgr image.", 'start': 12176.514, 'duration': 13.789}, {'end': 12199.489, 'text': "so i'm going to just write cv to dot color, underscore bgr to rgb.", 'start': 12190.303, 'duration': 9.186}, {'end': 12210.175, 'text': 'okay, so our matplotlib library shows the image in the rgb format and the opencv reads the image in bgr format.', 'start': 12199.489, 'duration': 10.686}], 'summary': 'Converting image from bgr to rgb format using cv2 library.', 'duration': 33.661, 'max_score': 12176.514, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ12176514.jpg'}, {'end': 12446.133, 'src': 'embed', 'start': 12416.438, 'weight': 0, 'content': [{'end': 12431.646, 'text': 'import pi plot as plt and then what we are going to do is we are going to define the titles and then we are going to define these six different titles for six different images.', 'start': 12416.438, 'duration': 15.208}, {'end': 12434.267, 'text': 'so first one is our original image.', 'start': 12431.646, 'duration': 2.621}, {'end': 12436.949, 'text': 'second was the trash binary.', 'start': 12434.267, 'duration': 2.682}, {'end': 12439.27, 'text': 'third was trash binary inverse.', 'start': 12436.949, 'duration': 2.321}, {'end': 12440.711, 'text': 'fourth was trunk.', 'start': 12439.27, 'duration': 1.441}, {'end': 12444.453, 'text': 'fifth was two zero and six was two zero inverse.', 'start': 12440.711, 'duration': 3.742}, {'end': 12446.133, 'text': 'In the same way,', 'start': 12445.493, 'duration': 0.64}], 'summary': 'Using pi plot, defined titles for six different images: original, trash binary, trash binary inverse, trunk, two zero, and two zero inverse.', 'duration': 29.695, 'max_score': 12416.438, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ12416438.jpg'}, {'end': 12506.212, 'src': 'embed', 'start': 12476.662, 'weight': 10, 'content': [{'end': 12488.805, 'text': 'so for i in x range, so using the python x range, we are going to just iterate over these six values.', 'start': 12476.662, 'duration': 12.143}, {'end': 12495.887, 'text': "so i'm going to just write x range and then the range we are going to provide here is 6 and then inside this, for loop,", 'start': 12488.805, 'duration': 7.082}, {'end': 12503.13, 'text': 'we are going to just call plt and we are going to call a method called subplot.', 'start': 12495.887, 'duration': 7.243}, {'end': 12506.212, 'text': 'okay, and this subplot method takes few arguments.', 'start': 12503.13, 'duration': 3.082}], 'summary': "Using python's x range to iterate over 6 values and call plt.subplot.", 'duration': 29.55, 'max_score': 12476.662, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ12476662.jpg'}, {'end': 12862.722, 'src': 'heatmap', 'start': 12514.455, 'weight': 0.705, 'content': [{'end': 12522.404, 'text': 'So because we have six images, so we are going to divide these images into two rows and three columns.', 'start': 12514.455, 'duration': 7.949}, {'end': 12529.373, 'text': 'So the first argument here is the number of rows and the second argument here is the number of columns.', 'start': 12522.705, 'duration': 6.668}, {'end': 12534.057, 'text': 'columns. and the third argument here will be the index of the image.', 'start': 12530.273, 'duration': 3.784}, {'end': 12543.305, 'text': 'so the index of the image will be i plus one and then we are going to write comma plt dot.', 'start': 12534.057, 'duration': 9.248}, {'end': 12544.767, 'text': 'i am show.', 'start': 12543.305, 'duration': 1.462}, {'end': 12550.492, 'text': 'so this is going to show this image and the index of the image.', 'start': 12544.767, 'duration': 5.725}, {'end': 12555.115, 'text': 'so we are going to just write the images and then square bracket i.', 'start': 12550.492, 'duration': 4.623}, {'end': 12562.68, 'text': 'so this is going to give you a particular image at index i and then we want to show this image as a gray scale image.', 'start': 12555.115, 'duration': 7.565}, {'end': 12570.184, 'text': 'so anyway, when you use thresholding, you use the gray scale image, so you just need to write a gray here.', 'start': 12562.68, 'duration': 7.504}, {'end': 12574.668, 'text': 'Then we are going to show the titles of these images.', 'start': 12570.484, 'duration': 4.184}, {'end': 12578.451, 'text': 'So we are going to just write plt.title.', 'start': 12575.028, 'duration': 3.423}, {'end': 12585.357, 'text': 'And then this title method takes the title name, which we are getting using this titles array.', 'start': 12578.691, 'duration': 6.666}, {'end': 12593.745, 'text': 'And then at the index i, this is going to give you the title name, which we have declared in this title array.', 'start': 12585.978, 'duration': 7.767}, {'end': 12601.122, 'text': "And at last, if you don't want to show the ticks on the images, you can give these two methods,", 'start': 12594.033, 'duration': 7.089}, {'end': 12612.335, 'text': 'which is plt.xticks and the argument here is the empty list, and also plt.yticks and the argument is the empty list.', 'start': 12601.122, 'duration': 11.213}, {'end': 12627.672, 'text': 'And at the end, what we want to do is, instead of using this kind of code, we just want to show our window, so we can just say plt.show.', 'start': 12613.196, 'duration': 14.476}, {'end': 12631.617, 'text': 'and this is showing us this error unresolved reference yes,', 'start': 12627.672, 'duration': 3.945}, {'end': 12644.485, 'text': "So this is when you are using Python 2, but in Python 3, this x range is changed to a method called range, and that's why it was giving us the error.", 'start': 12632.177, 'duration': 12.308}, {'end': 12647.547, 'text': "So let's run this script once again.", 'start': 12644.865, 'duration': 2.682}, {'end': 12654.314, 'text': 'And you can see six different results and six different titles.', 'start': 12648.408, 'duration': 5.906}, {'end': 12663.645, 'text': 'So these are all the titles which are shown here and then the result are shown under these titles.', 'start': 12654.875, 'duration': 8.77}, {'end': 12670.815, 'text': 'So using matplotlib, you can include multiple images into one window.', 'start': 12663.965, 'duration': 6.85}, {'end': 12678.787, 'text': 'And this is very useful when you want to show multiple image at the same time in the same window.', 'start': 12671.296, 'duration': 7.491}, {'end': 12689.664, 'text': 'so this is how you can use matplotlib library with opencv images and there is a lot of things which you can do with matplotlib.', 'start': 12679.227, 'duration': 10.437}, {'end': 12694.251, 'text': 'so if you want to learn more, you can just go to the official website, which is matplotlib.com.', 'start': 12689.664, 'duration': 4.587}, {'end': 12700.913, 'text': 'lib.org, and then you will be able to see more documentation here.', 'start': 12694.811, 'duration': 6.102}, {'end': 12707.536, 'text': 'In this video we are going to discuss about morphological transformations in OpenCV.', 'start': 12701.714, 'duration': 5.822}, {'end': 12717.48, 'text': 'So we will discuss different morphological operations like erosion, dilation, opening and closing methods etc.', 'start': 12708.416, 'duration': 9.064}, {'end': 12731.049, 'text': 'But first of all what are morphological transformations? So morphological transformations are some simple operations based on the image shape.', 'start': 12718.38, 'duration': 12.669}, {'end': 12737.755, 'text': 'Now morphological transformation is normally performed on a binary image.', 'start': 12732.03, 'duration': 5.725}, {'end': 12744.603, 'text': 'And when we perform morphological transformation, there are two things which are required.', 'start': 12738.616, 'duration': 5.987}, {'end': 12756.381, 'text': 'First is the original image and second is called a structuring element or a kernel which decides the nature of the operation.', 'start': 12745.424, 'duration': 10.957}, {'end': 12763.688, 'text': 'Now there are different type of morphological transformations and we are going to see them one by one.', 'start': 12757.623, 'duration': 6.065}, {'end': 12772.276, 'text': 'Now. to start with, I have this simple code which reads the image using OpenCV IAM read method,', 'start': 12764.649, 'duration': 7.627}, {'end': 12777.18, 'text': 'and we are just loading or showing this image using matplotlib.', 'start': 12772.276, 'duration': 4.904}, {'end': 12789.47, 'text': 'now, if you are unfamiliar with matplotlib and how to use matplotlib to show images, in the last video i have explained this topic in details.', 'start': 12778.021, 'duration': 11.449}, {'end': 12800.159, 'text': 'so if you want to see that video about matplotlib, you can see it, and this is the code i have used in the last video also,', 'start': 12789.47, 'duration': 10.689}, {'end': 12804.162, 'text': 'and i have explained this code in details in the last video.', 'start': 12800.159, 'duration': 4.003}, {'end': 12810.363, 'text': 'So if you are confused what this code is doing, just see the last video.', 'start': 12804.762, 'duration': 5.601}, {'end': 12819.046, 'text': 'Now there is one important thing to notice here is I am reading this image in a grayscale mode.', 'start': 12810.844, 'duration': 8.202}, {'end': 12828.708, 'text': 'So either you can provide here as the second argument of imreadcv2.imread underscore grayscale,', 'start': 12820.046, 'duration': 8.662}, {'end': 12833.249, 'text': 'or you can provide simply zero here in order to read this image in grayscale.', 'start': 12828.708, 'duration': 4.541}, {'end': 12837.133, 'text': "so let's run this code and let's see what it does.", 'start': 12833.809, 'duration': 3.324}, {'end': 12845.923, 'text': "so, as expected, it's just opening the image in the grayscale mode using matplotlib.", 'start': 12837.133, 'duration': 8.79}, {'end': 12853.812, 'text': 'now, as i said, normally we perform the morphological transformations on the binary images,', 'start': 12845.923, 'duration': 7.889}, {'end': 12860.4, 'text': "So that's why we need to provide a mask to our image using the simple thresholding.", 'start': 12854.432, 'duration': 5.968}, {'end': 12862.722, 'text': "So let's just do that.", 'start': 12861.06, 'duration': 1.662}], 'summary': 'Discussing morphological transformations in opencv, including erosion, dilation, and more, with practical code examples and explanations.', 'duration': 348.267, 'max_score': 12514.455, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ12514455.jpg'}, {'end': 12789.47, 'src': 'embed', 'start': 12764.649, 'weight': 5, 'content': [{'end': 12772.276, 'text': 'Now. to start with, I have this simple code which reads the image using OpenCV IAM read method,', 'start': 12764.649, 'duration': 7.627}, {'end': 12777.18, 'text': 'and we are just loading or showing this image using matplotlib.', 'start': 12772.276, 'duration': 4.904}, {'end': 12789.47, 'text': 'now, if you are unfamiliar with matplotlib and how to use matplotlib to show images, in the last video i have explained this topic in details.', 'start': 12778.021, 'duration': 11.449}], 'summary': 'Code reads image using opencv, shows image using matplotlib.', 'duration': 24.821, 'max_score': 12764.649, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ12764649.jpg'}, {'end': 13178.942, 'src': 'embed', 'start': 13146.427, 'weight': 13, 'content': [{'end': 13149.048, 'text': "so I'm going to just run this code once again.", 'start': 13146.427, 'duration': 2.621}, {'end': 13152.609, 'text': 'and And now you can see all these three images.', 'start': 13149.048, 'duration': 3.561}, {'end': 13164.792, 'text': 'First was the original image, second is the masked image and the third one is the image which we got after we applied the dilation.', 'start': 13153.189, 'duration': 11.603}, {'end': 13169.213, 'text': 'Let me just increase the size of this image somehow.', 'start': 13165.172, 'duration': 4.041}, {'end': 13178.942, 'text': "so now you can see that, for example, here there was a black dot and now it's reduced.", 'start': 13169.973, 'duration': 8.969}], 'summary': 'Code run displayed original, masked, and dilated images; reduced black dot size.', 'duration': 32.515, 'max_score': 13146.427, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ13146427.jpg'}, {'end': 13756.306, 'src': 'embed', 'start': 13718.114, 'weight': 11, 'content': [{'end': 13734.441, 'text': 'and the morphological operation here will be close and run this code And now you can see the result here.', 'start': 13718.114, 'duration': 16.327}, {'end': 13742.391, 'text': 'So in closing as I said, first of all the dilation is applied and then the erosion is applied.', 'start': 13735.122, 'duration': 7.269}, {'end': 13748.179, 'text': 'In the opening first of all erosion is applied and then the dilation will be applied.', 'start': 13742.852, 'duration': 5.327}, {'end': 13756.306, 'text': 'Now there are different type of morphological operations you can apply using this morphology X.', 'start': 13748.519, 'duration': 7.787}], 'summary': 'The morphological operations include dilation, erosion, and opening, with specific sequences applied for each.', 'duration': 38.192, 'max_score': 13718.114, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ13718114.jpg'}, {'end': 13821.068, 'src': 'embed', 'start': 13786.034, 'weight': 3, 'content': [{'end': 13793.403, 'text': "So we are going to just call this morph gradient and it's going to apply the morphological gradient.", 'start': 13786.034, 'duration': 7.369}, {'end': 13799.204, 'text': 'then the next is the top hat and the black hat.', 'start': 13794.123, 'duration': 5.081}, {'end': 13804.945, 'text': 'so there are different morphological techniques you can apply.', 'start': 13799.204, 'duration': 5.741}, {'end': 13811.946, 'text': "so I'm going to show you one more and then I will leave you with the other techniques.", 'start': 13804.945, 'duration': 7.001}, {'end': 13821.068, 'text': 'so th for top hat, and here also the second argument you just need to change it to top hat right.', 'start': 13811.946, 'duration': 9.122}], 'summary': 'Demonstrating morphological gradient, top hat, and black hat techniques.', 'duration': 35.034, 'max_score': 13786.034, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ13786034.jpg'}, {'end': 13922.269, 'src': 'embed', 'start': 13850.669, 'weight': 7, 'content': [{'end': 13864.189, 'text': 'to our list of titles and list of images, so mg and then we have th for top hat and now we have eight images.', 'start': 13850.669, 'duration': 13.52}, {'end': 13880.776, 'text': "so range is increased to eight, and let's say, we just want to show them in two by four matrix here in the matplotlib window.", 'start': 13864.189, 'duration': 16.587}, {'end': 13886.038, 'text': 'So you can see this is the result of morphological gradient.', 'start': 13881.536, 'duration': 4.502}, {'end': 13894, 'text': 'So morphological gradient is the difference between the dilation and erosion of an image.', 'start': 13886.698, 'duration': 7.302}, {'end': 13898.284, 'text': 'this is the result of top hat.', 'start': 13895.161, 'duration': 3.123}, {'end': 13903.91, 'text': 'that means it is the difference between the image and the opening of an image.', 'start': 13898.284, 'duration': 5.626}, {'end': 13910.457, 'text': 'so this is how you can perform some of the morphological operations on the images.', 'start': 13903.91, 'duration': 6.547}, {'end': 13913.22, 'text': 'now i will show you one more example.', 'start': 13911.158, 'duration': 2.062}, {'end': 13922.269, 'text': "i have a image called j dot png, so i'm going to just load this image.", 'start': 13913.22, 'duration': 9.049}], 'summary': 'Demonstrated morphological operations on images, increasing range to 8 and showing in 2x4 matrix in matplotlib window.', 'duration': 71.6, 'max_score': 13850.669, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ13850669.jpg'}], 'start': 11809.546, 'title': 'Using matplotlib and opencv for image processing', 'summary': 'Covers using matplotlib with opencv, displaying multiple images, morphological transformations, and image processing techniques such as thresholding, dilation, erosion, opening, closing, morphological gradient, and top hat, with examples and advantages provided.', 'chapters': [{'end': 12389.469, 'start': 11809.546, 'title': 'Using matplotlib with opencv', 'summary': 'Introduces using matplotlib with opencv, covering installation, image format conversion, and advantages such as interactive features, image saving, zooming, and configuration subplots options.', 'duration': 579.923, 'highlights': ['Matplotlib is a Python 2D plotting library which is used with OpenCV to display graphs, images, and histograms. Matplotlib is a 2D plotting library used with OpenCV to display graphs, images, and histograms, enhancing visualization in Python.', 'The installation process for Matplotlib involves using pip from the command line or installing it directly within PyCharm IDE. Matplotlib can be installed using pip from the command line or directly within PyCharm IDE, providing flexibility for users.', 'OpenCV reads images in BGR format, while Matplotlib reads images in RGB format, necessitating the conversion of images from BGR to RGB format to display them correctly in Matplotlib. OpenCV reads images in BGR format, while Matplotlib reads them in RGB format, requiring the conversion of images from BGR to RGB format for accurate display in Matplotlib.', 'Matplotlib offers interactive features, image saving capabilities, zooming options, and configuration subplots for enhanced visualization. Matplotlib provides interactive features, image saving options, zooming capabilities, and configuration subplots, enriching the visualization experience.', 'Using plt.xticks and plt.yticks with an empty array hides the tick values on the X and Y axes in Matplotlib. Using plt.xticks and plt.yticks with an empty array hides the tick values on the X and Y axes in Matplotlib, providing flexibility in customizing image display.']}, {'end': 12763.688, 'start': 12390.409, 'title': 'Using matplotlib to display multiple images', 'summary': 'Discusses how to use matplotlib to display six different images from opencv in one window, using python and includes the process of defining titles, iterating through the images, and displaying them as grayscale images in a 2x3 grid.', 'duration': 373.279, 'highlights': ['The chapter discusses how to use Matplotlib to display six different images from OpenCV in one window. Describes the main objective of using Matplotlib to display multiple images from OpenCV in a single window.', 'Defining titles and iterating through the images using a for loop. Details the process of defining titles and iterating through the images using a for loop.', 'Displaying the images as grayscale images in a 2x3 grid. Explains the configuration of displaying the images as grayscale in a 2x3 grid using Matplotlib.']}, {'end': 13361.967, 'start': 12764.649, 'title': 'Image processing morphological transformations', 'summary': "Covers image processing using opencv and matplotlib, explaining the process of loading, displaying, and manipulating grayscale images, applying thresholding and morphological transformations such as dilation and erosion to remove noise and modify the image's features.", 'duration': 597.318, 'highlights': ["The chapter covers the process of loading, displaying, and manipulating grayscale images using OpenCV and matplotlib. It explains the usage of OpenCV's imread method and matplotlib for image display, emphasizing the importance of understanding matplotlib for image visualization.", 'The process of applying thresholding to create a mask for image transformation is explained. It details the use of cv2.threshold for creating a mask, providing an example with a threshold value of 220 and visualizing the masked image using matplotlib.', "The application of morphological transformations such as dilation to remove noise and modify the image's features is demonstrated. It illustrates the use of cv2.dilate to remove black dots from the image, explaining the concept of a kernel and the impact of iteration on the dilation process.", 'The concept of erosion and its role in refining image features is introduced. It introduces the usage of CV2.erode for erosion, highlighting its purpose in refining image features and preparing for further morphological operations.']}, {'end': 13621.046, 'start': 13362.907, 'title': 'Morphological image processing', 'summary': 'Explains the concepts of dilation, erosion, and opening in morphological image processing using the cv2 library, showcasing the impact of iterations and kernel size on the resulting images.', 'duration': 258.139, 'highlights': ['The chapter explains the concepts of dilation, erosion, and opening in morphological image processing. The chapter covers the fundamental concepts of dilation, erosion, and opening in morphological image processing, demonstrating their application in image manipulation.', 'The impact of iterations and kernel size on the resulting images is showcased. The chapter demonstrates the influence of varying iterations and kernel size on the resulting images, highlighting the changes in the processed images based on these parameters.', 'The erosion operation erodes away the boundary of the foreground object, similar to soil erosion. Erosion operation is explained as a process that erodes the boundary of the foreground object, drawing a parallel to the concept of soil erosion for better understanding.']}, {'end': 13951.359, 'start': 13621.046, 'title': 'Morphological operations in image processing', 'summary': 'Discusses morphological operations in image processing, including opening, closing, morphological gradient, and top hat techniques, showcasing their effects on images and explaining their differences.', 'duration': 330.313, 'highlights': ['Morphological gradient is the difference between the dilation and erosion of an image. Morphological gradient technique showcased with the result and explanation.', 'Top hat operation results in the difference between the image and the opening of an image. Demonstration of the top hat technique and its impact on the image.', 'Closing is the opposite of opening, involving dilation followed by erosion. Explanation of the closing morphological transformation method and its process.', 'Erosion followed by dilation is the process of opening in morphological transformations. Definition and demonstration of the opening method in morphological transformations.']}], 'duration': 2141.813, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ11809546.jpg', 'highlights': ['Matplotlib is a 2D plotting library used with OpenCV to display graphs, images, and histograms, enhancing visualization in Python.', 'Matplotlib can be installed using pip from the command line or directly within PyCharm IDE, providing flexibility for users.', 'OpenCV reads images in BGR format, while Matplotlib reads them in RGB format, requiring the conversion of images from BGR to RGB format for accurate display in Matplotlib.', 'Matplotlib provides interactive features, image saving options, zooming capabilities, and configuration subplots, enriching the visualization experience.', 'Using plt.xticks and plt.yticks with an empty array hides the tick values on the X and Y axes in Matplotlib, providing flexibility in customizing image display.', 'The chapter discusses how to use Matplotlib to display six different images from OpenCV in one window, detailing the process of defining titles and iterating through the images using a for loop.', 'The chapter covers the process of loading, displaying, and manipulating grayscale images using OpenCV and matplotlib, emphasizing the importance of understanding matplotlib for image visualization.', 'The process of applying thresholding to create a mask for image transformation is explained, detailing the use of cv2.threshold for creating a mask, providing an example with a threshold value of 220 and visualizing the masked image using matplotlib.', "The application of morphological transformations such as dilation to remove noise and modify the image's features is demonstrated, illustrating the use of cv2.dilate to remove black dots from the image, explaining the concept of a kernel and the impact of iteration on the dilation process.", 'The chapter covers the fundamental concepts of dilation, erosion, and opening in morphological image processing, demonstrating their application in image manipulation.', 'The chapter demonstrates the influence of varying iterations and kernel size on the resulting images, highlighting the changes in the processed images based on these parameters.', 'Erosion operation is explained as a process that erodes the boundary of the foreground object, drawing a parallel to the concept of soil erosion for better understanding.', 'Morphological gradient technique showcased with the result and explanation.', 'Demonstration of the top hat technique and its impact on the image.', 'Explanation of the closing morphological transformation method and its process.', 'Definition and demonstration of the opening method in morphological transformations.']}, {'end': 16094.859, 'segs': [{'end': 14260.382, 'src': 'embed', 'start': 14224.623, 'weight': 4, 'content': [{'end': 14227.203, 'text': 'because the formula which we have seen.', 'start': 14224.623, 'duration': 2.58}, {'end': 14238.329, 'text': 'in that formula we have the kernel, which was a matrix of ones, And then we have the multiplication of 1,', 'start': 14227.203, 'duration': 11.126}, {'end': 14241.892, 'text': 'divided by the width and height of the kernel.', 'start': 14238.329, 'duration': 3.563}, {'end': 14246.175, 'text': "So that's why the multiplication of the width and height is 25.", 'start': 14242.372, 'duration': 3.803}, {'end': 14247.717, 'text': "That's why I have taken 25 here.", 'start': 14246.175, 'duration': 1.542}, {'end': 14260.382, 'text': 'So now we have our kernel, so we can define our destination image using this kernel and we are going to use CV2 dot.', 'start': 14249.438, 'duration': 10.944}], 'summary': 'Using a kernel matrix of ones, the width and height are multiplied to get 25, defining the destination image.', 'duration': 35.759, 'max_score': 14224.623, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ14224623.jpg'}, {'end': 14482.254, 'src': 'embed', 'start': 14447.992, 'weight': 3, 'content': [{'end': 14453.134, 'text': 'So the kernel we are going to apply is once again 5 by 5.', 'start': 14447.992, 'duration': 5.142}, {'end': 14458.518, 'text': 'And now we are going to just see the result of this blurring method.', 'start': 14453.134, 'duration': 5.384}, {'end': 14464.482, 'text': 'So we are going to just load it using the matplotlib.', 'start': 14458.958, 'duration': 5.524}, {'end': 14468.485, 'text': "So range, I'm going to increase it by one once again.", 'start': 14464.642, 'duration': 3.843}, {'end': 14476.35, 'text': "And let's see these three images in one by three format on the matplotlib window.", 'start': 14468.805, 'duration': 7.545}, {'end': 14478.251, 'text': 'So this is the result.', 'start': 14476.73, 'duration': 1.521}, {'end': 14482.254, 'text': 'And you can see the original image.', 'start': 14479.492, 'duration': 2.762}], 'summary': 'Applying a 5x5 kernel for blurring resulted in a displayed image.', 'duration': 34.262, 'max_score': 14447.992, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ14447992.jpg'}, {'end': 15003.359, 'src': 'embed', 'start': 14967.546, 'weight': 5, 'content': [{'end': 14976.388, 'text': 'So the sigma color is the filter sigma in the color space and sigma space is the filter sigma in the coordinate space.', 'start': 14967.546, 'duration': 8.842}, {'end': 14986.149, 'text': "So for this we are going to take this filter sigma color and sigma space as 75 and 75 here and let's see it in the result window.", 'start': 14976.888, 'duration': 9.261}, {'end': 15001.498, 'text': 'So bilateral filter, and then the result bilateral filter, and this gives me error, because this image is called lena.jpg, not png.', 'start': 14990.67, 'duration': 10.828}, {'end': 15003.359, 'text': 'so jpg.', 'start': 15001.498, 'duration': 1.861}], 'summary': 'Using sigma color and sigma space of 75 for bilateral filter, encountering error due to incorrect image format.', 'duration': 35.813, 'max_score': 14967.546, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ14967546.jpg'}, {'end': 15058.488, 'src': 'embed', 'start': 15030.853, 'weight': 2, 'content': [{'end': 15042.598, 'text': 'So here you can see the hat border is blurred, but here you can see in the result the border of the hat are preserved.', 'start': 15030.853, 'duration': 11.745}, {'end': 15052.124, 'text': 'So the images in which you need to preserve the borders then you can use the bilateral filter.', 'start': 15043.058, 'duration': 9.066}, {'end': 15058.488, 'text': 'So bilateral filter is highly effective in noise removal while keeping the edge sharp.', 'start': 15052.304, 'duration': 6.184}], 'summary': 'Bilateral filter preserves hat borders, effective in noise removal.', 'duration': 27.635, 'max_score': 15030.853, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ15030853.jpg'}, {'end': 16094.859, 'src': 'embed', 'start': 16061.886, 'weight': 0, 'content': [{'end': 16069.209, 'text': 'So, this first threshold value and the second threshold value you need to provide for the hysteresis procedure.', 'start': 16061.886, 'duration': 7.323}, {'end': 16077.132, 'text': 'So there is the last step, as I mentioned, and in that step hysteresis take place,', 'start': 16069.229, 'duration': 7.903}, {'end': 16086.215, 'text': 'and for that procedure we need to provide the values of the threshold 1 and the threshold 2..', 'start': 16077.132, 'duration': 9.083}, {'end': 16094.859, 'text': "So for now, I'm going to provide 100 as the threshold 1 and 200 as the threshold 2.", 'start': 16086.215, 'duration': 8.644}], 'summary': 'For the hysteresis procedure, threshold 1 is set at 100 and threshold 2 at 200.', 'duration': 32.973, 'max_score': 16061.886, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16061886.jpg'}], 'start': 13951.919, 'title': 'Image processing techniques in opencv', 'summary': 'Covers morphological transformations, smoothing images with linear filters, diverse image filtering techniques, image gradients, and the kenny edge detector in opencv. it showcases the effects of these techniques on image area, corner detection, noise removal, edge preservation, and edge detection using specific examples and practical demonstrations.', 'chapters': [{'end': 14015.246, 'start': 13951.919, 'title': 'Morphological image transformations', 'summary': 'Discusses morphological transformations such as dilation, erosion, opening, closing, morphological gradient, and top hat, showcasing their effects on image area and corners, and their differences in image processing.', 'duration': 63.327, 'highlights': ['Morphological transformations include dilation, erosion, opening, closing, morphological gradient, and top hat. These transformations are the main focus of the discussion and form the basis for further details.', 'Dilation increases the area of the image, erosion erodes away the corners, and opening and closing combine erosion and dilation in different sequences. Provides specific effects of each transformation, giving a clear understanding of their individual impact on the image.', 'Morphological gradient shows the difference between dilation and erosion, while top hat presents the difference between the input image and the opening of the image. Explains the purpose and distinction of these two transformations, enhancing the understanding of their unique contributions to image processing.']}, {'end': 14188.64, 'start': 14015.246, 'title': 'Smoothing images in opencv', 'summary': 'Discusses the smoothing or blurring of images in opencv, exploring the use of diverse linear filters such as homogeneous, gaussian, median, and bilateral filters for removing noise, with a focus on the homogeneous filter and its kernel calculation.', 'duration': 173.394, 'highlights': ['Smoothing or blurring is a commonly used operation in image processing to remove noise, and diverse linear filters like homogeneous, Gaussian, median, or bilateral filters are available in OpenCV.', 'Homogeneous filter is a simple filter where each output pixel is the mean of its kernel neighbors, with the kernel calculated using the formula k = 1 / (width of kernel * height of kernel).', 'The chapter explains how to create and use a squared kernel, for example, a 5x5 kernel would have k = 1/25 and a kernel matrix of 5x5 ones, for image filtering using 2D convolution or homogeneous filter.', 'The code provided loads an image using matplotlib, converting it from BGR to RGB format for compatibility with matplotlib.']}, {'end': 15058.488, 'start': 14188.66, 'title': 'Image filtering techniques', 'summary': 'Discusses the application of various image filtering techniques including homogeneous filter, averaging, gaussian blur, median filter, and bilateral filter, demonstrating their impact on noise removal and edge preservation in opencv, with qualitative and quantitative assessments.', 'duration': 869.828, 'highlights': ['The chapter covers the application of various image filtering techniques including homogeneous filter, averaging, Gaussian blur, median filter, and bilateral filter. The chapter discusses the application of different image filtering techniques, providing a comprehensive overview of methods used in OpenCV.', 'The application of Gaussian blur and bilateral filter resulted in better noise removal and edge preservation compared to the homogeneous filter and averaging techniques. The Gaussian blur and bilateral filter demonstrate superior performance in noise removal and edge preservation, as evidenced by visual and qualitative assessments.', 'The median filter proved to be the most effective in noise removal when dealing with salt and pepper noise in images. The median filter was found to be the most effective in removing salt and pepper noise, offering a significant improvement in image quality.']}, {'end': 15405.257, 'start': 15058.649, 'title': 'Image gradients in opencv', 'summary': 'Introduces image gradients in opencv, explaining their importance in image processing and demonstrating the application of the laplacian gradient method to identify edges in an image using the messy5.jpg example.', 'duration': 346.608, 'highlights': ['The Laplacian method, Sobel X method, and Sobel Y method are three different gradient functions available in OpenCV, used to find edges and directional changes in image intensity or color.', 'The Laplacian method involves calculating Laplacian derivatives, while the Sobel method combines Gaussian and differentiation operations to find image gradients.', 'The application of the Laplacian method to the messy5.jpg image results in the detection of edges, showcasing the directional change in image intensity or color.']}, {'end': 15619.464, 'start': 15406.077, 'title': 'Image gradient methods', 'summary': 'Introduces image gradient methods including kernel size and sobel x and y methods, demonstrating the impact on the result and discussing their usefulness.', 'duration': 213.387, 'highlights': ['The chapter discusses the impact of kernel size on the result, demonstrating deterioration with an increased kernel size and improvement with a reduced size.', 'Introduction of Sobel X and Sobel Y methods, explaining their purpose and the differentiation between dx and dy values.', "Detailed explanation of the Sobel method's arguments, including the use of dx and dy values, and the order of derivative for x and y directions."]}, {'end': 16094.859, 'start': 15620.324, 'title': 'Kenny edge detector in opencv', 'summary': "Explains the process of using the kenny edge detector in opencv, including the multistage algorithm and its development by john f. kenny in 1986, as well as the five steps involved in the canny edge detection algorithm. it also provides a practical demonstration of edge detection using the 'messi.jpg' image with specific threshold values of 100 and 200.", 'duration': 474.535, 'highlights': ['Using the Sobel X and Sobel Y gradient methods, the directional change in intensity in the X and Y directions is illustrated, with more vertical lines seen in the Sobel X result and more change in intensity in the vertical direction in the Sobel Y result.', 'The process of canny edge detection algorithm is broken down into five different steps, including applying a Gaussian filter to smooth the image, finding the intensity gradients, applying non-maximum suppression, applying double threshold, and tracking edges by hysteresis to finalize the detection of the edges by suppressing weak or unconnected edges.', "The built-in function 'Kenny' in OpenCV is utilized to detect the edges of the 'Messi.jpg' image, with specific threshold values of 100 and 200 provided for the hysteresis procedure."]}], 'duration': 2142.94, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ13951919.jpg', 'highlights': ['Morphological transformations include dilation, erosion, opening, closing, morphological gradient, and top hat.', 'Smoothing or blurring is a commonly used operation in image processing to remove noise, and diverse linear filters like homogeneous, Gaussian, median, or bilateral filters are available in OpenCV.', 'The application of Gaussian blur and bilateral filter resulted in better noise removal and edge preservation compared to the homogeneous filter and averaging techniques.', 'The Laplacian method, Sobel X method, and Sobel Y method are three different gradient functions available in OpenCV, used to find edges and directional changes in image intensity or color.', 'The chapter discusses the impact of kernel size on the result, demonstrating deterioration with an increased kernel size and improvement with a reduced size.', 'The process of canny edge detection algorithm is broken down into five different steps, including applying a Gaussian filter to smooth the image, finding the intensity gradients, applying non-maximum suppression, applying double threshold, and tracking edges by hysteresis to finalize the detection of the edges by suppressing weak or unconnected edges.']}, {'end': 17310.882, 'segs': [{'end': 16150.584, 'src': 'embed', 'start': 16125.221, 'weight': 6, 'content': [{'end': 16130.867, 'text': 'and i have already explained how you can use track bars with opencv.', 'start': 16125.221, 'duration': 5.646}, {'end': 16133.95, 'text': 'so just watch that video and you will be good to go.', 'start': 16130.867, 'duration': 3.083}, {'end': 16139.655, 'text': 'So now we have the result of Kenny edge detection function.', 'start': 16134.691, 'duration': 4.964}, {'end': 16150.584, 'text': 'So we are going to just add it to our list, first to the list of titles and then second to the list of images and the range.', 'start': 16140.075, 'duration': 10.509}], 'summary': 'Explained track bars with opencv and demonstrated kenny edge detection function.', 'duration': 25.363, 'max_score': 16125.221, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16125221.jpg'}, {'end': 16501.261, 'src': 'embed', 'start': 16442.971, 'weight': 4, 'content': [{'end': 16448.616, 'text': 'First is called Gaussian pyramid and second is called Laplacian pyramid.', 'start': 16442.971, 'duration': 5.645}, {'end': 16451.96, 'text': 'So first we will discuss about the Gaussian pyramid.', 'start': 16449.017, 'duration': 2.943}, {'end': 16458.946, 'text': 'So Gaussian pyramid is nothing but repeat filtering and subsampling of an image.', 'start': 16452.599, 'duration': 6.347}, {'end': 16468.689, 'text': 'Now there are two functions available for the Gaussian pyramid which is called PIRDOWN and PIRUP.', 'start': 16459.947, 'duration': 8.742}, {'end': 16471.51, 'text': "So let's see them one by one.", 'start': 16469.15, 'duration': 2.36}, {'end': 16480.973, 'text': 'So I have this sample code which is just reading an image and then showing it using the IMSHOW method.', 'start': 16472.211, 'duration': 8.762}, {'end': 16496.98, 'text': "Now in order to use this PIRDOWN function, you can just define a variable, let's say L R for lower resolution and then you can use CV2 dot pair down.", 'start': 16481.133, 'duration': 15.847}, {'end': 16501.261, 'text': 'So there are two functions you can see pair down and pair up.', 'start': 16497.279, 'duration': 3.982}], 'summary': 'Gaussian and laplacian pyramids involve filtering and subsampling; cv2 pirdown and pirup functions are used.', 'duration': 58.29, 'max_score': 16442.971, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16442971.jpg'}, {'end': 16762.034, 'src': 'embed', 'start': 16733.857, 'weight': 3, 'content': [{'end': 16739.241, 'text': 'So this image we have converted to this image using the pair up method.', 'start': 16733.857, 'duration': 5.384}, {'end': 16753.446, 'text': 'So, ideally this image should look like this, but you have to remember that this pair up image is not going to be equal to this image,', 'start': 16739.703, 'duration': 13.743}, {'end': 16762.034, 'text': 'because once you decrease the resolution using the pare down method, you lose the information about that image.', 'start': 16753.446, 'duration': 8.588}], 'summary': 'Pairing up method used to convert images, but resolution decrease leads to information loss.', 'duration': 28.177, 'max_score': 16733.857, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16733857.jpg'}, {'end': 16813.158, 'src': 'embed', 'start': 16789.957, 'weight': 0, 'content': [{'end': 16800.228, 'text': 'you are not going to get the same result as you might expect, that this image should look like this, but they are not equal images.', 'start': 16789.957, 'duration': 10.271}, {'end': 16808.276, 'text': 'So this image is just a higher resolution of this image and it has nothing to do with this image.', 'start': 16800.468, 'duration': 7.808}, {'end': 16813.158, 'text': 'So these are the two methods which are available in Gaussian pyramid.', 'start': 16808.536, 'duration': 4.622}], 'summary': 'Higher resolution image not equal to original, using gaussian pyramid', 'duration': 23.201, 'max_score': 16789.957, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16789957.jpg'}, {'end': 17006.069, 'src': 'embed', 'start': 16972.207, 'weight': 5, 'content': [{'end': 16989.317, 'text': "So cv2.iamshow, and here we can just say str for converting the integer to the string, because the first parameter you'd give to, I am sure,", 'start': 16972.207, 'duration': 17.11}, {'end': 16990.898, 'text': 'is a string parameter.', 'start': 16989.317, 'duration': 1.581}, {'end': 16997.003, 'text': "That's why I'm converting the integer to the string and the second parameter is the image.", 'start': 16991.018, 'duration': 5.985}, {'end': 16999.384, 'text': "So let's pass this layer here.", 'start': 16997.043, 'duration': 2.341}, {'end': 17006.069, 'text': 'So you have the original image which will be shown using this line of code,', 'start': 17000.505, 'duration': 5.564}], 'summary': 'Using cv2.iamshow to display original image.', 'duration': 33.862, 'max_score': 16972.207, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16972207.jpg'}, {'end': 17205.27, 'src': 'embed', 'start': 17139.798, 'weight': 1, 'content': [{'end': 17147.982, 'text': 'so what we are going to do is because we have appended each and every image to this list right.', 'start': 17139.798, 'duration': 8.184}, {'end': 17159.809, 'text': 'so we have all the images inside this list, so we can just get the last image using the indexing.', 'start': 17147.982, 'duration': 11.827}, {'end': 17174.698, 'text': "So again I'm going to use the layer variable and then I'm going to just say GP for Gaussian pyramid list, and then there is the index 5,", 'start': 17159.989, 'duration': 14.709}, {'end': 17181.125, 'text': 'because last image will be available at the index 5 of this list.', 'start': 17174.698, 'duration': 6.427}, {'end': 17189.453, 'text': 'So we get the last image of that Gaussian pyramid and then let us show this image.', 'start': 17181.525, 'duration': 7.928}, {'end': 17191.074, 'text': 'So I am going to just say cv2.', 'start': 17189.493, 'duration': 1.581}, {'end': 17198.602, 'text': 'show, and this is the upper level or the last image.', 'start': 17194.858, 'duration': 3.744}, {'end': 17201.646, 'text': "so i'm going to say upper level, gaussian pyramid.", 'start': 17198.602, 'duration': 3.044}, {'end': 17205.27, 'text': 'and then we are going to pass this layer variable here.', 'start': 17201.646, 'duration': 3.624}], 'summary': 'Retrieve and display the last image from gaussian pyramid list using index 5.', 'duration': 65.472, 'max_score': 17139.798, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ17139798.jpg'}], 'start': 16094.859, 'title': 'Image processing techniques', 'summary': 'Covers canny edge detection with opencv, comparing it with other methods, and explores image pyramids, including gaussian and laplacian pyramids, with code examples and visual demonstrations. it also details the creation of laplacian pyramids from gaussian pyramids using python and opencv.', 'chapters': [{'end': 16345.909, 'start': 16094.859, 'title': 'Exploring canny edge detection', 'summary': 'Explores the implementation of canny edge detection method with opencv, showcasing its ability to produce precise edges with minimal noise, and compares it with other image gradient methods, resulting in a clearer output.', 'duration': 251.05, 'highlights': ['The Canny edge detection method showcases its ability to produce precise edges with minimal noise, as compared to other image gradient methods, resulting in a clearer output.', 'The chapter discusses the addition of a track bar to visualize changes in edge detection by adjusting the threshold values, serving as a small assignment for the viewers to implement.', 'The chapter demonstrates the results of Canny edge detection on various images, emphasizing its usefulness and effectiveness in producing accurate edges with minimal noise.']}, {'end': 17006.069, 'start': 16346.67, 'title': 'Image pyramids: gaussian and laplacian', 'summary': 'Explains the concept of image pyramids, specifically gaussian pyramid, and its functions in opencv, such as pirdown and pirup, for reducing and increasing image resolution, demonstrated with code examples and visual results.', 'duration': 659.399, 'highlights': ['Gaussian pyramid: Repeated filtering and subsampling of an image to create images of different resolutions, demonstrated with PIRDOWN and PIRUP functions. The concept of Gaussian pyramid involves repeated filtering and subsampling of an image to create images of different resolutions, demonstrated with PIRDOWN and PIRUP functions in OpenCV.', 'Demonstration of PIRDOWN: Reducing image resolution using PIRDOWN function, resulting in images with halved, quartered, and further reduced resolutions. The PIRDOWN function is demonstrated to reduce image resolution, resulting in images with halved, quartered, and further reduced resolutions, showcasing the multi-scale signal representation.', 'Demonstration of PIRUP: Increasing image resolution using PIRUP function, with the caveat that increased resolution may result in blurred images due to lost information from PIRDOWN. The PIRUP function is demonstrated to increase image resolution, with the caveat that increased resolution may result in blurred images due to lost information from PIRDOWN, highlighting the limitations of the process.']}, {'end': 17310.882, 'start': 17006.069, 'title': 'Creating laplacian pyramids from gaussian pyramids', 'summary': 'Demonstrates how to create laplacian pyramids from gaussian pyramids using python and opencv, including the process of forming and displaying the pyramids, with a visual explanation of the code implementation.', 'duration': 304.813, 'highlights': ['The chapter demonstrates the process of creating Laplacian pyramids from Gaussian pyramids using Python and OpenCV, including the code implementation and visual explanation.', 'The process involves forming Laplacian pyramids from Gaussian pyramids, utilizing the difference between levels in the Gaussian pyramid and the extended version of its upper level, with a demonstration of the code implementation.', 'The code implementation involves creating a Laplacian pyramid by selecting the top level layer of the Gaussian pyramid, displaying the last image, and then creating a new list for the Laplacian pyramid using a for loop.', 'The explanation includes a demonstration of the range function in Python, showcasing its parameters and implementation for generating a sequence of values from 5 to 1 with a step of -1.']}], 'duration': 1216.023, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ16094859.jpg', 'highlights': ['Canny edge detection produces precise edges with minimal noise, resulting in a clearer output.', 'Demonstration of Canny edge detection on various images emphasizes its usefulness and effectiveness.', 'The addition of a track bar allows visualization of changes in edge detection by adjusting threshold values.', 'Gaussian pyramid involves repeated filtering and subsampling of an image to create images of different resolutions.', 'Demonstration of PIRDOWN function showcases the reduction of image resolution resulting in halved, quartered, and further reduced resolutions.', 'Demonstration of PIRUP function highlights the increase in image resolution with the caveat of potential blurring.', 'Creation of Laplacian pyramids from Gaussian pyramids is demonstrated using Python and OpenCV.', 'The process involves forming Laplacian pyramids from Gaussian pyramids, utilizing the difference between levels and the extended version of its upper level.', 'Code implementation involves creating a Laplacian pyramid by selecting the top level layer of the Gaussian pyramid and displaying the last image.', 'Explanation includes a demonstration of the range function in Python, showcasing its parameters and implementation for generating a sequence of values.']}, {'end': 20102.83, 'segs': [{'end': 18388.883, 'src': 'embed', 'start': 18358.407, 'weight': 4, 'content': [{'end': 18366.033, 'text': 'now the fourth step is to just join the half of these two images.', 'start': 18358.407, 'duration': 7.626}, {'end': 18376.879, 'text': "so what i'm going to do is now i'm going to just create one more variable, which will be apple underscore, orange underscore,", 'start': 18366.033, 'duration': 10.846}, {'end': 18388.883, 'text': "let's say pyramid is equal to, and also we are going to create a variable called n and we are going to see later how to use this variable.", 'start': 18376.879, 'duration': 12.004}], 'summary': 'Join half of two images using variables apple_orange_pyramid and n.', 'duration': 30.476, 'max_score': 18358.407, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ18358407.jpg'}, {'end': 19295.86, 'src': 'embed', 'start': 19269.582, 'weight': 5, 'content': [{'end': 19281.213, 'text': "so we are going to just give the color 0, comma 255, comma 0, let's say, and the next argument will be the thickness.", 'start': 19269.582, 'duration': 11.631}, {'end': 19283.275, 'text': 'so we are going to take the thickness 3 here.', 'start': 19281.213, 'duration': 2.062}, {'end': 19291.918, 'text': 'So using this method what we have achieved is we have drawn the contours on the original image.', 'start': 19284.176, 'duration': 7.742}, {'end': 19295.86, 'text': "So let's run this code once again and let's see what result we get.", 'start': 19292.319, 'duration': 3.541}], 'summary': 'Code draws contours on image using color (0, 255, 0) and thickness 3.', 'duration': 26.278, 'max_score': 19269.582, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ19269582.jpg'}, {'end': 19646.963, 'src': 'embed', 'start': 19610.812, 'weight': 0, 'content': [{'end': 19615.294, 'text': "So I'm going to just copy this code and paste it here.", 'start': 19610.812, 'duration': 4.482}, {'end': 19619.537, 'text': "So this will be our frame one, let's say.", 'start': 19615.494, 'duration': 4.043}, {'end': 19624.478, 'text': "And similarly, I'm going to just read the second frame.", 'start': 19620.377, 'duration': 4.101}, {'end': 19630.639, 'text': 'So simply we are just declaring two frame one after another.', 'start': 19625.038, 'duration': 5.601}, {'end': 19635.48, 'text': "And we don't need this code anymore.", 'start': 19631.68, 'duration': 3.8}, {'end': 19646.963, 'text': "So first of all I'm going to declare a variable diff and using cv2.abs diff method, so absolute difference.", 'start': 19635.92, 'duration': 11.043}], 'summary': 'Code copied, two frames declared, absolute difference method used.', 'duration': 36.151, 'max_score': 19610.812, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ19610812.jpg'}], 'start': 17310.882, 'title': 'Image processing techniques', 'summary': 'Covers laplacian and gaussian pyramids, image blending, and object detection using opencv, demonstrating their application, creation, and effectiveness, with examples and results showcased for image manipulation and motion detection. it also explains contours, resulting in 9 contours being identified and drawn on the image.', 'chapters': [{'end': 18019.676, 'start': 17310.882, 'title': 'Laplacian and gaussian pyramids', 'summary': 'Introduces the concept of laplacian and gaussian pyramids, demonstrating their creation and application in image blending, with a step-by-step process explained, also showcasing an example of blending two images and its challenges.', 'duration': 708.794, 'highlights': ['The Laplacian pyramid is formed by the difference between the level in the Gaussian pyramid and the extended version of its upper level, aiding in edge detection and image blending. The Laplacian pyramid is formed by the difference between the level in the Gaussian pyramid and the extended version of its upper level, providing edge detection and aiding in image blending.', 'The Gaussian pyramid helps in blending and reconstructing images, serving as a key benefit of creating both Laplacian and Gaussian pyramids. The Gaussian pyramid aids in blending and reconstructing images, serving as a key benefit of creating both Laplacian and Gaussian pyramids.', 'The process of blending two images using image pyramid techniques involves five steps: loading the images, finding the Gaussian pyramid of the images, obtaining the Laplacian pyramid, combining the corresponding halves, and reconstructing the original image. The process of blending two images using image pyramid techniques involves five steps: loading the images, finding the Gaussian pyramid of the images, obtaining the Laplacian pyramid, combining the corresponding halves, and reconstructing the original image.']}, {'end': 18515.291, 'start': 18019.676, 'title': 'Image pyramid generation', 'summary': 'Explains the process of generating gaussian and laplacian pyramids for the apple and orange images, including the method of generating multiple layers and joining the halves of the images, using opencv. it demonstrates the creation of gaussian and laplacian pyramids for image manipulation.', 'duration': 495.615, 'highlights': ['Demonstrating the generation of Gaussian and Laplacian pyramids for the apple and orange images Describing the process of creating multiple layers for the apple and orange images, using OpenCV, and the method of joining the halves of the images after applying the pyramids', 'Explanation of the method of generating multiple layers for the apple and orange images Detailing the process of creating Gaussian and Laplacian pyramids for both images, using OpenCV, along with the technique of joining the halves of the images', 'Description of the process of applying Gaussian and Laplacian pyramids on both images Outlining the steps involved in applying the Gaussian and Laplacian pyramids on the apple and orange images, using OpenCV']}, {'end': 18819.334, 'start': 18515.951, 'title': 'Image blending with laplacian and gaussian pyramids', 'summary': 'Demonstrates using laplacian and gaussian pyramids to blend apple and orange images, resulting in a seamless blend with no visible line, showcasing the effectiveness of the technique.', 'duration': 303.383, 'highlights': ['The chapter demonstrates using Laplacian and Gaussian pyramids to blend apple and orange images, resulting in a seamless blend with no visible line, showcasing the effectiveness of the technique.', 'The final step involves reconstructing the image by stacking the left and right halves of each level and adding all the layers to get the reconstructed apple orange image.', 'The process involves taking the apple lap variable, half of the number of columns in the apple shape, and the orange lab variable, also half of the number of columns, and appending the Laplacian variable to the created list.', 'The technique successfully blends the apple and orange images, removing the visible line that was present when simply stacking the images side by side.']}, {'end': 19446.771, 'start': 18819.814, 'title': 'Contours and object detection', 'summary': 'Explains contours as curves joining continuous points along the boundary with the same color or intensity, and demonstrates how to find and draw contours, resulting in 9 contours being identified and drawn on the image using opencv.', 'duration': 626.957, 'highlights': ['Contours are curves joining continuous points along the boundary with the same color or intensity, useful for shape analysis, object detection, or recognition. Contours are explained as curves joining all continuous points along the boundary with the same color or intensity, serving as a useful tool for shape analysis, object detection, and object recognition.', 'Binary image is generally used for better accuracy in finding contours. Binary images are commonly used for achieving better accuracy in finding contours.', 'Threshold or canny edge detection is applied before finding the contours, resulting in 9 contours being identified and drawn on the image using OpenCV. Before finding the contours, the threshold or canny edge detection is applied, leading to the identification and drawing of 9 contours on the image using OpenCV.']}, {'end': 20102.83, 'start': 19447.051, 'title': 'Motion detection & tracking with python & opencv', 'summary': 'Demonstrates how to create a basic motion detection and tracking system using python and opencv to track and display rectangles around moving individuals, with the ability to show movement status, achieved by finding contours and applying them to the original video feed.', 'duration': 655.779, 'highlights': ['The chapter demonstrates how to create a basic motion detection and tracking system using Python and OpenCV to track and display rectangles around moving individuals, with the ability to show movement status, achieved by finding contours and applying them to the original video feed. Create a basic motion detection and tracking system using Python and OpenCV; Track and display rectangles around moving individuals; Show movement status; Finding contours and applying them to the original video feed.', 'The method involves finding the absolute difference between the first and second frames, converting the difference into grayscale mode, blurring the grayscale frame, finding the threshold, dilating the thresholded image to fill in all the holes, and finding the contours using the findContours method. Find absolute difference between frames; Convert difference to grayscale mode; Blur the grayscale frame; Find the threshold; Dilate the thresholded image; Find the contours using the findContours method.', 'The system involves drawing the identified contours on the original frame and displaying the resulting frame to show the tracked movement of individuals in the video feed. Draw identified contours on the original frame; Display the resulting frame to show the tracked movement of individuals in the video feed.']}], 'duration': 2791.948, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ17310882.jpg', 'highlights': ['The process of blending two images using image pyramid techniques involves five steps: loading the images, finding the Gaussian pyramid of the images, obtaining the Laplacian pyramid, combining the corresponding halves, and reconstructing the original image.', 'The Laplacian pyramid is formed by the difference between the level in the Gaussian pyramid and the extended version of its upper level, providing edge detection and aiding in image blending.', 'The Gaussian pyramid aids in blending and reconstructing images, serving as a key benefit of creating both Laplacian and Gaussian pyramids.', 'The chapter demonstrates using Laplacian and Gaussian pyramids to blend apple and orange images, resulting in a seamless blend with no visible line, showcasing the effectiveness of the technique.', 'Contours are explained as curves joining all continuous points along the boundary with the same color or intensity, serving as a useful tool for shape analysis, object detection, and object recognition.', 'Create a basic motion detection and tracking system using Python and OpenCV; Track and display rectangles around moving individuals; Show movement status; Finding contours and applying them to the original video feed.']}, {'end': 22581.335, 'segs': [{'end': 20659.115, 'src': 'embed', 'start': 20625.776, 'weight': 8, 'content': [{'end': 20641.348, 'text': "and let's say we want to detect using opencv which shape it is based upon the geometrical shape and we want to write the name on top of this shape.", 'start': 20625.776, 'duration': 15.572}, {'end': 20644.55, 'text': "so how we can achieve this, let's see using opencv.", 'start': 20641.348, 'duration': 3.202}, {'end': 20659.115, 'text': "So, as you can see, if the first step is to read an image and then in the second line I'm just converting this image into a grayscale mode image.", 'start': 20646.191, 'duration': 12.924}], 'summary': 'Using opencv to detect and label geometrical shapes in images.', 'duration': 33.339, 'max_score': 20625.776, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ20625776.jpg'}, {'end': 21771.896, 'src': 'embed', 'start': 21738.763, 'weight': 5, 'content': [{'end': 21748.631, 'text': 'So let me just start this example and you can see this is the final result.', 'start': 21738.763, 'duration': 9.868}, {'end': 21757.558, 'text': 'So all the pixels here in this image are black and the size is 200 by 200.', 'start': 21748.671, 'duration': 8.887}, {'end': 21764.567, 'text': "Now let's say we want to calculate or find out the histogram of this image.", 'start': 21757.558, 'duration': 7.009}, {'end': 21769.173, 'text': 'So there are several ways of finding out histogram of an image.', 'start': 21764.927, 'duration': 4.246}, {'end': 21771.896, 'text': "So let's see them one by one.", 'start': 21769.533, 'duration': 2.363}], 'summary': 'Demonstration of finding the histogram of a 200x200 black image.', 'duration': 33.133, 'max_score': 21738.763, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ21738763.jpg'}, {'end': 22190.331, 'src': 'embed', 'start': 22110.545, 'weight': 0, 'content': [{'end': 22114.79, 'text': "So let's say it goes from 0,50 to 0,50.", 'start': 22110.545, 'duration': 4.245}, {'end': 22128.869, 'text': "100 comma 100 and the color here we are going to provide the pixel value of 127 let's say okay so which is the half of 0 and 255 approximately.", 'start': 22114.79, 'duration': 14.079}, {'end': 22136.316, 'text': "So I'm going to run this example once again.", 'start': 22132.373, 'duration': 3.943}, {'end': 22140.219, 'text': 'And now you will see this kind of image.', 'start': 22137.197, 'duration': 3.022}, {'end': 22143.781, 'text': 'So you can see half of the pixels here are wide.', 'start': 22140.659, 'duration': 3.122}, {'end': 22147.864, 'text': 'That means 20,000 pixels have the pixel value of 255.', 'start': 22144.021, 'duration': 3.843}, {'end': 22148.645, 'text': 'So you can see here.', 'start': 22147.864, 'duration': 0.781}, {'end': 22158.671, 'text': 'Now around 15,000 pixels here in the half of this image have the pixel value of 0.', 'start': 22150.906, 'duration': 7.765}, {'end': 22168.218, 'text': "That's why you can see this line here and we have added the rectangle of pixel value 127 also.", 'start': 22158.671, 'duration': 9.547}, {'end': 22177.944, 'text': 'So around you can see around 5000 pixels here have the pixel value of 127.', 'start': 22168.238, 'duration': 9.706}, {'end': 22182.066, 'text': 'so this is how the histogram is going to work.', 'start': 22177.944, 'duration': 4.122}, {'end': 22190.331, 'text': "so let's use now the original image, so some kind of image instead of this black or white image.", 'start': 22182.066, 'duration': 8.265}], 'summary': 'Image analysis: 20,000 pixels at 255, 15,000 at 0, and 5,000 at 127.', 'duration': 79.786, 'max_score': 22110.545, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ22110545.jpg'}, {'end': 22539.494, 'src': 'embed', 'start': 22474.318, 'weight': 1, 'content': [{'end': 22477.199, 'text': 'so the first argument here will be the image.', 'start': 22474.318, 'duration': 2.881}, {'end': 22480.441, 'text': "so it's the source which you give.", 'start': 22477.199, 'duration': 3.242}, {'end': 22486.563, 'text': 'but the only special thing is you just give this image in the square brackets.', 'start': 22480.441, 'duration': 6.122}, {'end': 22490.585, 'text': 'OK, the second argument here is the channels.', 'start': 22487.063, 'duration': 3.522}, {'end': 22495.689, 'text': 'So it is the index of channels for which we calculate the histogram.', 'start': 22490.686, 'duration': 5.003}, {'end': 22506.536, 'text': 'So here in our case, because we are going to read the image in grayscale mode, we can just give the channel zero here.', 'start': 22496.309, 'duration': 10.227}, {'end': 22510.539, 'text': 'So for one channel, you can give zero here for different channel.', 'start': 22506.616, 'duration': 3.923}, {'end': 22513.86, 'text': 'you can give 0, 1, 2 value.', 'start': 22511.059, 'duration': 2.801}, {'end': 22516.841, 'text': 'the next argument here is the image mask.', 'start': 22513.86, 'duration': 2.981}, {'end': 22530.147, 'text': 'so to find histogram of full image, it is given as a none because our, because our image is loaded in the grayscale mode, so we can give here none.', 'start': 22516.841, 'duration': 13.306}, {'end': 22534.31, 'text': 'The next value is the hist size.', 'start': 22531.287, 'duration': 3.023}, {'end': 22539.494, 'text': 'So this hist size is the representation of bin counts.', 'start': 22534.69, 'duration': 4.804}], 'summary': 'Using opencv, histograms can be calculated for images by specifying image source, channels, image mask, and histogram size.', 'duration': 65.176, 'max_score': 22474.318, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ22474318.jpg'}], 'start': 20103.37, 'title': 'Opencv and shape recognition', 'summary': 'Covers using python and opencv to detect motion, draw rectangles around moving objects, identify and label geometric shapes, and utilize histograms for shape recognition and pixel analysis.', 'chapters': [{'end': 20485.126, 'start': 20103.37, 'title': 'Drawing rectangles and removing noises', 'summary': 'Discusses drawing rectangles around moving persons and removing noises by iterating through contours, applying bounding rectangle and area calculation, and printing text if movement is observed.', 'duration': 381.756, 'highlights': ['Drawing rectangles around moving persons The chapter emphasizes the process of drawing rectangles around moving persons by iterating through contours, applying bounding rectangle and area calculation, and printing text if movement is observed.', 'Removing noises by iterating through contours The method for removing noises involves iterating through contours, applying bounding rectangle and area calculation, and printing text if movement is observed.', 'Applying bounding rectangle and area calculation The process involves applying bounding rectangle and area calculation on the contours to determine the coordinates and sizes for drawing rectangles and removing noises.', 'Printing text if movement is observed The chapter illustrates the method of printing text on the image if movement is observed, specifying the text, position, font, and color.']}, {'end': 21014.363, 'start': 20485.127, 'title': 'Opencv: detecting motion and geometrical shapes', 'summary': 'Demonstrates how to detect motion in a video using python and opencv, including the process of drawing rectangles around moving objects based on contour areas, and then transitions into identifying and labeling simple geometrical shapes in an image using opencv.', 'duration': 529.236, 'highlights': ['The code puts a rectangle around moving persons if the area of that contour is greater than 700. The code draws rectangles around moving persons when the contour area exceeds 700.', 'Rectangles can be drawn around moving persons with a contour area greater than 900. Rectangles are drawn around moving persons with a contour area exceeding 900, effectively removing noise from the frame.', 'Demonstrates the process of detecting and labeling simple geometrical shapes in an image using OpenCV. The chapter showcases the process of detecting and labeling simple geometrical shapes in an image using OpenCV.']}, {'end': 21348.746, 'start': 21014.363, 'title': 'Identifying shapes and placing text', 'summary': 'Demonstrates how to identify shapes based on the number of approximate points and then place corresponding text on the image, such as identifying a triangle with 3 points, rectangle/square with 4 points, pentagon with 5 points, star with 10 points, or else a circle, utilizing opencv methods and logic.', 'duration': 334.383, 'highlights': ['Identifying shapes by the number of approximate points: triangle (3 points), rectangle/square (4 points), pentagon (5 points), star (10 points), or else a circle, enabling text placement based on shape recognition.', 'Using the aprox variable to find x and y coordinates for text placement on the shape, achieved by utilizing the ravel method and indexing to obtain the x and y coordinates for text positioning.', "Utilizing OpenCV's putText method to place text on the identified shape, specifying the image, text, coordinates, font, font scale, and color for text placement.", 'Determining the shape of the image based on the length of the aprox variable, where a length of 3 denotes a triangle, 4 signifies a rectangle/square, 5 indicates a pentagon, 10 denotes a star, and other conditions signify a circle or other shapes, allowing for dynamic shape recognition and text placement.']}, {'end': 21669.026, 'start': 21348.746, 'title': 'Identifying rectangles and squares in an image', 'summary': 'Discusses the process of identifying rectangles and squares in an image using the aspect ratio, with the aspect ratio between 0.95 and 1.05 indicating a square, and demonstrates the visualization of the identified shapes.', 'duration': 320.28, 'highlights': ['Demonstration of identifying rectangles and squares using aspect ratio The aspect ratio between 0.95 and 1.05 indicates a square, and the aspect ratio is calculated using the width and height of the rectangle.', 'Visualization of identified shapes in the image The code demonstrates drawing contours around the shapes and placing text on top of the identified shapes, including rectangles and squares.', 'Adjusting text position for better visibility Offsets are applied to the y-axis to adjust the position of the text for better visibility, and local x and y coordinates are declared for specific text positioning.']}, {'end': 21977.266, 'start': 21669.506, 'title': 'Understanding histograms in opencv', 'summary': 'Explains how to detect simple geometric shapes using opencv and discusses histograms in opencv, illustrating an example of creating a 200x200 pixel black image and finding its histogram using matplotlib, which displays all 40,000 pixels with an intensity of 0.', 'duration': 307.76, 'highlights': ['The chapter explains how to detect simple geometric shapes using OpenCV, providing practical demonstrations and explanations.', 'It discusses histograms in OpenCV, emphasizing their role in providing an overall idea about the intensity distribution of an image.', 'An example is illustrated where a 200x200 pixel black image is created and its histogram is found using matplotlib, displaying all 40,000 pixels with an intensity of 0.']}, {'end': 22581.335, 'start': 21977.326, 'title': 'Using histograms in opencv', 'summary': 'Details how to use histograms in opencv, including adding rectangles of different pixel values to an image, analyzing pixel intensities, and splitting an image into bgr values for individual histograms.', 'duration': 604.009, 'highlights': ['Adding rectangles of different pixel values to an image. Demonstrates adding white and gray rectangles of different sizes and positions to an image, affecting the pixel intensity distribution.', 'Analyzing pixel intensities using histograms. Illustrates analyzing pixel intensities of black and white images using histograms, showing the distribution of pixel values.', 'Splitting an image into BGR values for individual histograms. Explains how to split an image into BGR values and create individual histograms for the blue, green, and red channels.']}], 'duration': 2477.965, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ20103370.jpg', 'highlights': ['Covers using python and opencv to detect motion, draw rectangles around moving objects, identify and label geometric shapes, and utilize histograms for shape recognition and pixel analysis.', 'The chapter illustrates the method of printing text on the image if movement is observed, specifying the text, position, font, and color.', 'Rectangles are drawn around moving persons with a contour area exceeding 900, effectively removing noise from the frame.', 'The chapter showcases the process of detecting and labeling simple geometrical shapes in an image using OpenCV.', 'Determining the shape of the image based on the length of the aprox variable, allowing for dynamic shape recognition and text placement.', 'The aspect ratio between 0.95 and 1.05 indicates a square, and the aspect ratio is calculated using the width and height of the rectangle.', 'The code demonstrates drawing contours around the shapes and placing text on top of the identified shapes, including rectangles and squares.', 'The chapter explains how to detect simple geometric shapes using OpenCV, providing practical demonstrations and explanations.', 'It discusses histograms in OpenCV, emphasizing their role in providing an overall idea about the intensity distribution of an image.', 'Illustrates analyzing pixel intensities of black and white images using histograms, showing the distribution of pixel values.', 'Explains how to split an image into BGR values and create individual histograms for the blue, green, and red channels.']}, {'end': 23732.444, 'segs': [{'end': 22888.186, 'src': 'embed', 'start': 22822.512, 'weight': 2, 'content': [{'end': 22824.615, 'text': 'First is our image.', 'start': 22822.512, 'duration': 2.103}, {'end': 22827.68, 'text': "So I'm going to pass our grayscale image here.", 'start': 22824.736, 'duration': 2.944}, {'end': 22834.711, 'text': 'The second argument here will be the template, which we are trying to search inside this image.', 'start': 22828.481, 'duration': 6.23}, {'end': 22837.035, 'text': 'So this will be our template.', 'start': 22835.252, 'duration': 1.783}, {'end': 22840.198, 'text': 'The third is the method.', 'start': 22837.876, 'duration': 2.322}, {'end': 22845.143, 'text': 'So the method can be several methods.', 'start': 22840.939, 'duration': 4.204}, {'end': 22849.627, 'text': 'There are several methods available for the template matching.', 'start': 22845.183, 'duration': 4.444}, {'end': 22854.372, 'text': 'So I want to show you these methods for the template matching.', 'start': 22849.708, 'duration': 4.664}, {'end': 22857.996, 'text': 'So you can see type of template matching operations.', 'start': 22854.412, 'duration': 3.584}, {'end': 22866.618, 'text': 'And there is separate formula involved in order to match that template inside that image.', 'start': 22858.896, 'duration': 7.722}, {'end': 22881.262, 'text': 'So for now we are going to use this method which is tm underscore ccoef underscore normed dot tm underscore ccoef normed which is this method.', 'start': 22867.018, 'duration': 14.244}, {'end': 22888.186, 'text': "now let's try to print this result and let's see what is the content inside this result.", 'start': 22881.582, 'duration': 6.604}], 'summary': 'Demonstrating template matching using grayscale image, template, and method tm_ccoef_normed.', 'duration': 65.674, 'max_score': 22822.512, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ22822512.jpg'}, {'end': 23154.26, 'src': 'embed', 'start': 23120.464, 'weight': 0, 'content': [{'end': 23132.451, 'text': "so I'm going to just say Give me all those values which are greater than or equal to the threshold inside this result matrix.", 'start': 23120.464, 'duration': 11.987}, {'end': 23138.935, 'text': 'So this where method is going to just evaluate this expression.', 'start': 23132.912, 'duration': 6.023}, {'end': 23141.597, 'text': 'Each and every value will be evaluated.', 'start': 23139.476, 'duration': 2.121}, {'end': 23154.26, 'text': "if this value inside the matrix is greater than 0.8, which is our threshold, then it's going to give those values to us.", 'start': 23142.557, 'duration': 11.703}], 'summary': 'A method evaluates matrix values >= 0.8 to extract them.', 'duration': 33.796, 'max_score': 23120.464, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ23120464.jpg'}, {'end': 23255.624, 'src': 'embed', 'start': 23223.261, 'weight': 5, 'content': [{'end': 23226.583, 'text': 'and it will be located somewhere here in the original image.', 'start': 23223.261, 'duration': 3.322}, {'end': 23236.69, 'text': 'Then we can draw the rectangle around this original image same as the size of this template.', 'start': 23227.263, 'duration': 9.427}, {'end': 23245.136, 'text': 'So this will be the easier task because we already know the width and height of this template.', 'start': 23236.81, 'duration': 8.326}, {'end': 23248.799, 'text': 'We already know how to get the width and height of this template.', 'start': 23245.176, 'duration': 3.623}, {'end': 23255.624, 'text': 'And same size rectangle we just want to draw on this original image.', 'start': 23249.319, 'duration': 6.305}], 'summary': 'Drawing a rectangle around the original image of the same size as the template, utilizing known width and height dimensions.', 'duration': 32.363, 'max_score': 23223.261, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ23223261.jpg'}, {'end': 23356.576, 'src': 'embed', 'start': 23326.503, 'weight': 7, 'content': [{'end': 23333.525, 'text': "But let's say there are several number of matched templates inside original image.", 'start': 23326.503, 'duration': 7.022}, {'end': 23342.287, 'text': 'For that, we need to iterate over the result, which we got after applying the filter on the result.', 'start': 23334.565, 'duration': 7.722}, {'end': 23352.533, 'text': 'so for that we are going to just iterate over that result in our case, as we know that there is only one point,', 'start': 23343.007, 'duration': 9.526}, {'end': 23356.576, 'text': "so we don't even need to iterate over it.", 'start': 23352.533, 'duration': 4.043}], 'summary': 'Iterating over multiple matched templates in original image to apply filter.', 'duration': 30.073, 'max_score': 23326.503, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ23326503.jpg'}, {'end': 23732.444, 'src': 'embed', 'start': 23700.93, 'weight': 4, 'content': [{'end': 23711.02, 'text': "So let's try to increase this value to 0.95 and let's rerun this code and let's see what happens.", 'start': 23700.93, 'duration': 10.09}, {'end': 23714.603, 'text': 'Now you are getting four values.', 'start': 23711.4, 'duration': 3.203}, {'end': 23718.387, 'text': 'You can also filter that out.', 'start': 23715.684, 'duration': 2.703}, {'end': 23722.21, 'text': "Let's say 0.99.", 'start': 23718.827, 'duration': 3.383}, {'end': 23723.352, 'text': "Now let's see what happens.", 'start': 23722.21, 'duration': 1.142}, {'end': 23726.155, 'text': 'So now you are getting only two values.', 'start': 23723.372, 'duration': 2.783}, {'end': 23732.444, 'text': 'So you need to try to change this value to the maximum point.', 'start': 23726.836, 'duration': 5.608}], 'summary': 'By increasing the value to 0.95, four values were obtained, which reduced to two at 0.99, highlighting the need to aim for the maximum point.', 'duration': 31.514, 'max_score': 23700.93, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ23700930.jpg'}], 'start': 22582.495, 'title': 'Image histograms and template matching in opencv', 'summary': 'Explores the uses of histograms in opencv for assessing image exposure and lighting conditions, and explains template matching, demonstrating the process of searching, finding the location of a template image, and drawing rectangles around matched templates.', 'chapters': [{'end': 22636.069, 'start': 22582.495, 'title': 'Understanding image histograms in opencv', 'summary': 'Explores the uses of histograms in opencv, including assessing image exposure and lighting conditions, and making adjustments for digital images.', 'duration': 53.574, 'highlights': ['Histograms can determine if an image has been properly exposed, providing useful insights for digital photography.', 'Histograms can also assess the lighting conditions during image capture, aiding in adjustments for digital images.', "OpenCV's calc hist method is used to generate histograms for images."]}, {'end': 23120.464, 'start': 22637.049, 'title': 'Template matching in opencv', 'summary': 'Explains template matching in opencv, demonstrating the process of searching and finding the location of a template image inside a larger image using the match template method, and filtering out the brightest point inside the matrix obtained from the result variable.', 'duration': 483.415, 'highlights': ['The chapter explains template matching in OpenCV, demonstrating the process of searching and finding the location of a template image inside a larger image using the match template method. Process of template matching, location of template image inside a larger image, usage of match template method.', 'The result obtained from the match template method contains a matrix with values representing the match between the template and the larger image, with the brightest point indicating the top left corner of the template inside the larger image. Result matrix interpretation, identification of the brightest point, indication of top left corner of the template inside the larger image.', 'The chapter explains the process of filtering out the brightest point inside the matrix obtained from the result variable using the numpy method and the np.where method. Filtering out the brightest point, usage of numpy and np.where method.']}, {'end': 23732.444, 'start': 23120.464, 'title': 'Template matching and rectangle drawing', 'summary': 'Discusses template matching in image processing, demonstrating filtering of values based on a threshold, identifying the brightest point in the result matrix, and drawing rectangles around matched templates.', 'duration': 611.98, 'highlights': ['The code filters out values greater than 0.9, resulting in only two points (85 and 220). When the threshold is set to 0.9, the filtering process yields only two points (85 and 220) as the brightest, demonstrating the impact of threshold setting on identifying relevant values.', 'The method draws rectangles around the matched templates, utilizing the width and height of the template to define the points for the rectangles. By utilizing the width and height of the template, the method draws rectangles around the matched templates, demonstrating the process of identifying and marking the matched areas in the original image.', 'Applying the TMCCORR normed method results in obtaining multiple points, which can be filtered based on different threshold values. The use of the TMCCORR normed method demonstrates obtaining multiple points, which can be further filtered based on different threshold values, showcasing the versatility of methods in template matching.']}], 'duration': 1149.949, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ22582495.jpg', 'highlights': ['Histograms can determine if an image has been properly exposed, providing useful insights for digital photography.', 'Histograms can also assess the lighting conditions during image capture, aiding in adjustments for digital images.', "OpenCV's calc hist method is used to generate histograms for images.", 'The chapter explains template matching in OpenCV, demonstrating the process of searching and finding the location of a template image inside a larger image using the match template method.', 'The result obtained from the match template method contains a matrix with values representing the match between the template and the larger image, with the brightest point indicating the top left corner of the template inside the larger image.', 'The code filters out values greater than 0.9, resulting in only two points (85 and 220). When the threshold is set to 0.9, the filtering process yields only two points (85 and 220) as the brightest, demonstrating the impact of threshold setting on identifying relevant values.', 'The method draws rectangles around the matched templates, utilizing the width and height of the template to define the points for the rectangles.', 'Applying the TMCCORR normed method results in obtaining multiple points, which can be filtered based on different threshold values.']}, {'end': 24646.687, 'segs': [{'end': 24163.022, 'src': 'embed', 'start': 24134.585, 'weight': 1, 'content': [{'end': 24137.907, 'text': 'which are joined by a line right?', 'start': 24134.585, 'duration': 3.322}, {'end': 24148.455, 'text': "So you can represent these four points and you can join all these four points, and it's our representation of a line.", 'start': 24138.287, 'duration': 10.168}, {'end': 24154.699, 'text': 'and here slope is equal to M and intercept is equal to C in the XY space.', 'start': 24148.455, 'duration': 6.244}, {'end': 24163.022, 'text': 'The same line you can represent in the MC space using these four lines.', 'start': 24155.66, 'duration': 7.362}], 'summary': 'Four points joined to represent a line in xy and mc space.', 'duration': 28.437, 'max_score': 24134.585, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ24134585.jpg'}, {'end': 24285.489, 'src': 'embed', 'start': 24251.751, 'weight': 0, 'content': [{'end': 24265.956, 'text': 'you can also represent this equation like this, where y is equal to minus cos theta by sin theta multiplied by x plus r divided by sin theta.', 'start': 24251.751, 'duration': 14.205}, {'end': 24273.199, 'text': 'So this is your xy space where line can be represented like this,', 'start': 24266.136, 'duration': 7.063}, {'end': 24285.489, 'text': 'and we are going to transform or represent this line using this equation into the r theta space or the half space.', 'start': 24273.199, 'duration': 12.29}], 'summary': 'Equation transforms line from xy to r theta space.', 'duration': 33.738, 'max_score': 24251.751, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ24251751.jpg'}, {'end': 24614.938, 'src': 'embed', 'start': 24584.807, 'weight': 3, 'content': [{'end': 24587.368, 'text': 'so this is the line and this is the line.', 'start': 24584.807, 'duration': 2.561}, {'end': 24592.49, 'text': 'so all these lines we want to detect using the half line transform.', 'start': 24587.368, 'duration': 5.122}, {'end': 24602.113, 'text': "so i have already written this code, so i'm going to go step by step, uh, to explain how this code works.", 'start': 24592.49, 'duration': 9.623}, {'end': 24608.355, 'text': 'so in the first step you just need to import the normal cv2 and the numpy as np.', 'start': 24602.113, 'duration': 6.242}, {'end': 24614.938, 'text': "Then here I'm just reading this image using I'm read method,", 'start': 24609.335, 'duration': 5.603}], 'summary': 'Using the hough line transform to detect lines in an image using opencv and numpy.', 'duration': 30.131, 'max_score': 24584.807, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ24584807.jpg'}], 'start': 23732.544, 'title': 'Hough transform for line detection', 'summary': 'Covers the concept of hough transform to detect shapes in images, transforming points from xy space to the polar coordinate system, and using hough transform for line detection. it explains the conversion of points in xy space to lines in mc space and the mapping of edge points to hough space, interpreting the accumulator to yield lines of infinite length.', 'chapters': [{'end': 24222.433, 'start': 23732.544, 'title': 'Understanding hough transform', 'summary': 'Explains the concept of half transform to detect shapes in images, using hough transform to convert points in xy space to lines in mc space, which intersect to represent parameters of a line in the mc space.', 'duration': 489.889, 'highlights': ['The half transform is a popular technique to detect shapes in images, even if they are broken or distorted, by converting edge pixels into a geometrical representation using the Hough transform.', 'Hough transform converts points in the XY space to lines in the MC space, where intersections represent the parameters of a line, providing a mechanism to give more weightage to pixels that are already in line.', 'Representing a line in the MC space as a point simplifies managing a collection of points, with intersections in the MC space used to draw lines, providing a way to represent points in a line using the Cartesian coordinate system.']}, {'end': 24405.32, 'start': 24223.234, 'title': 'Transforming points from xy space to polar coordinate system', 'summary': 'Explains the transformation of points from xy space to r theta space in a polar coordinate system, where the line equation r=x*cos(theta)+y*sin(theta) is used to represent points and multiple points result in multiple lines in the half space.', 'duration': 182.086, 'highlights': ['The equation r=x*cos(theta)+y*sin(theta) is used to represent points in the polar coordinate system. The equation r=x*cos(theta)+y*sin(theta) is used to represent points in the polar coordinate system, allowing the transformation of points from xy space to r theta space.', 'Multiple points in the xy space can be represented in the half space using multiple lines in the polar coordinate system. Multiple points in the xy space can be represented in the half space using multiple lines in the polar coordinate system, as demonstrated by the example with three points.', 'An example with three points demonstrates the representation of points in the polar coordinate system. An example with three points (x0=8, y0=6; x1=4, y1=9; x2=12, y2=3) illustrates the representation of points in the polar coordinate system, resulting in the use of three lines in the half space.']}, {'end': 24646.687, 'start': 24405.68, 'title': 'Hough transform for line detection', 'summary': 'Explores the hough transform for line detection, covering key steps such as edge detection using canny edge detector, mapping of edge points to hough space, interpretation of accumulator to yield lines of infinite length, and conversion of infinite lines to finite lines.', 'duration': 241.007, 'highlights': ['The Hough transform algorithm involves four important steps: edge detection, mapping of edge points to the half space, interpretation of accumulator to yield lines of infinite length, and conversion of infinite lines to finite lines.', 'OpenCV implements two types of Hough line transforms: the standard Hough lines method and the probabilistic Hough lines method.', 'The first step involves edge detection using the Canny edge detector and converting the image to grayscale.', 'The next step includes applying the Canny edge detection method to the grayscale image.']}], 'duration': 914.143, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ23732544.jpg', 'highlights': ['The Hough transform algorithm involves four important steps: edge detection, mapping of edge points to the half space, interpretation of accumulator to yield lines of infinite length, and conversion of infinite lines to finite lines.', 'Hough transform converts points in the XY space to lines in the MC space, where intersections represent the parameters of a line, providing a mechanism to give more weightage to pixels that are already in line.', 'The half transform is a popular technique to detect shapes in images, even if they are broken or distorted, by converting edge pixels into a geometrical representation using the Hough transform.', 'The equation r=x*cos(theta)+y*sin(theta) is used to represent points in the polar coordinate system, allowing the transformation of points from xy space to r theta space.', 'OpenCV implements two types of Hough line transforms: the standard Hough lines method and the probabilistic Hough lines method.']}, {'end': 26154.008, 'segs': [{'end': 25122.192, 'src': 'embed', 'start': 25092.349, 'weight': 0, 'content': [{'end': 25096.81, 'text': '2 here and the next line of code.', 'start': 25092.349, 'duration': 4.461}, {'end': 25109.677, 'text': 'you already know, i think so after this line we come out of the loop and we are just plotting all the lines using this loop, the original image.', 'start': 25096.81, 'duration': 12.867}, {'end': 25113.301, 'text': 'and once we get all these lines on the original image,', 'start': 25109.677, 'duration': 3.624}, {'end': 25122.192, 'text': "we are just showing it using I'm show method and at the last we are just destroying our window once we are done with the image.", 'start': 25113.301, 'duration': 8.891}], 'summary': 'Code plots and shows lines on original image.', 'duration': 29.843, 'max_score': 25092.349, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ25092349.jpg'}, {'end': 25436.368, 'src': 'embed', 'start': 25400.063, 'weight': 2, 'content': [{'end': 25401.865, 'text': 'And it takes few arguments.', 'start': 25400.063, 'duration': 1.802}, {'end': 25405.208, 'text': 'The first argument is your edge detected image.', 'start': 25402.165, 'duration': 3.043}, {'end': 25411.335, 'text': 'The second argument is the row, which is the distance resolution of the accumulator in pixels.', 'start': 25405.689, 'duration': 5.646}, {'end': 25423.541, 'text': 'The third argument is the theta value which we have taken np.pi divided by 180 which is the angle resolution of the accumulator in radians.', 'start': 25411.935, 'duration': 11.606}, {'end': 25426.863, 'text': 'The next value is the threshold.', 'start': 25424.482, 'duration': 2.381}, {'end': 25436.368, 'text': 'So right now we have taken this threshold as 100 and this threshold is the accumulator threshold parameter.', 'start': 25426.943, 'duration': 9.425}], 'summary': 'Edge detected image with row distance resolution, angle resolution in radians, and threshold of 100.', 'duration': 36.305, 'max_score': 25400.063, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ25400063.jpg'}], 'start': 24646.787, 'title': 'Methods for line detection in opencv', 'summary': 'Covers the hufftransform method, hough transform for line detection, probabilistic half line transform, probabilistic line transform, and lane detection using opencv, highlighting the processes and optimizations involved in line detection methods.', 'chapters': [{'end': 24706.652, 'start': 24646.787, 'title': 'Hufftransform method in opencv', 'summary': 'Explains the process of using the hufftransform method in opencv, which involves providing image, thresholds, and arguments for edge detection.', 'duration': 59.865, 'highlights': ['The first argument is the image, followed by the first and second threshold and the aperture size, with the second threshold set to 150 and the aperture size as 3.', 'The next step involves using the HuffLines method, which takes the edge-detected image as the first argument and a row value for the distance resolution of the accumulator in pixels.', 'The row value for the distance resolution of the accumulator in pixels is normally taken as one.']}, {'end': 25188.537, 'start': 24707.992, 'title': 'Hough transform for line detection', 'summary': 'Explains the hough transform for line detection, using polar coordinates to represent lines and converting them into cartesian coordinates for line plotting, as well as demonstrating the process of plotting lines on the original image.', 'duration': 480.545, 'highlights': ['Explaining the conversion of polar coordinates to Cartesian coordinates for line plotting The process involves obtaining the cos theta and sine theta values, multiplying them with the row value to calculate x0 and y0, and then using specific equations to derive the x1, y1, x2, and y2 coordinates for line plotting.', 'Demonstrating the process of plotting lines on the original image The chapter illustrates the use of CV2 dot line method to plot lines on the original image, with specific parameters such as the coordinates of the first and second points, color, and line thickness.', 'Setting the accumulator threshold parameter to 200 The chapter sets the accumulator threshold parameter to 200, specifying that only lines with a threshold greater than this value will be returned as output vectors.']}, {'end': 25399.482, 'start': 25188.997, 'title': 'Probabilistic half line transform in opencv', 'summary': 'Introduces the concept of the probabilistic half line transform as an optimization of the normal hough transform, which reduces computation by considering only a random subset of points for line detection and improves the accuracy of line detection compared to the standard half transform method in opencv.', 'duration': 210.485, 'highlights': ['The Probabilistic Hough Lines Transform is an optimization of the normal Hough Transform, reducing computation and improving accuracy by considering only a random subset of points for line detection.', 'The standard half transform using half lines method in OpenCV resulted in incorrect line detection and required a lot of computation, highlighting the inefficiency of the method.', 'The chapter emphasizes the benefits of using the probabilistic half line transform by showcasing its improved accuracy and reduced computation compared to the standard half transform method.']}, {'end': 25623.444, 'start': 25400.063, 'title': 'Probabilistic line transform', 'summary': 'Explains the probabilistic hough line transform method using opencv, which takes edge detected image as input and returns lines based on accumulator threshold, minimum line length, and maximum line gap, making line detection easier and efficient.', 'duration': 223.381, 'highlights': ['Probabilistic Hough line transform method method takes edge detected image as input and returns lines based on accumulator threshold, minimum line length, and maximum line gap. The probabilistic Hough line transform method is explained, which takes edge detected image as input and returns lines based on accumulator threshold, minimum line length, and maximum line gap.', 'The threshold parameter is set at 100, meaning only lines with votes greater than the threshold value are returned. The threshold parameter is set at 100, meaning only lines with votes greater than the threshold value are returned.', 'The minimum line length is set at 100, rejecting line segments shorter than this length, and the maximum line gap parameter is set to determine the maximum allowed gap between line segments to treat them as a single line. The minimum line length is set at 100, rejecting line segments shorter than this length, and the maximum line gap parameter is set to determine the maximum allowed gap between line segments to treat them as a single line.']}, {'end': 26154.008, 'start': 25623.444, 'title': 'Lane detection with opencv', 'summary': 'Details the process of lane detection using opencv, including the application of the half lines p method, which accurately detects lane lines in images, and the need to define a region of interest for lane line detection, with a plan to create a lane detection system using opencv and matplotlib.', 'duration': 530.564, 'highlights': ["The chapter demonstrates the application of the half lines P method to accurately detect lane lines in an image, showcasing the results of the method's application on a Kenny edge detected image and a road image, with a mention of the availability of the method in OpenCV. The half lines P method accurately detects lane lines in an image, demonstrating its effectiveness in identifying lane lines in both edge-detected and road images.", 'The need to define a region of interest for lane line detection is emphasized, with the suggestion to carefully select the area for line detection, illustrated by the detection of lane lines in a road image and the importance of accurately defining the region of interest. Emphasizes the importance of defining a region of interest for lane line detection, highlighting the need for careful selection of the area to accurately detect lane lines.', 'The plan to create a lane detection system using OpenCV and Matplotlib is outlined, with the intention to start with still images and progress to video frames for detecting lanes in motion, providing an overview of the upcoming project. Outlines the plan to create a lane detection system using OpenCV and Matplotlib, starting with still images and progressing to video frames for detecting lanes in motion.']}], 'duration': 1507.221, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ24646787.jpg', 'highlights': ['The Probabilistic Hough Lines Transform is an optimization of the normal Hough Transform, reducing computation and improving accuracy by considering only a random subset of points for line detection.', "The chapter demonstrates the application of the half lines P method to accurately detect lane lines in an image, showcasing the results of the method's application on a Kenny edge detected image and a road image, with a mention of the availability of the method in OpenCV.", 'Setting the accumulator threshold parameter to 200 The chapter sets the accumulator threshold parameter to 200, specifying that only lines with a threshold greater than this value will be returned as output vectors.', 'The plan to create a lane detection system using OpenCV and Matplotlib is outlined, with the intention to start with still images and progress to video frames for detecting lanes in motion, providing an overview of the upcoming project.', 'The need to define a region of interest for lane line detection is emphasized, with the suggestion to carefully select the area for line detection, illustrated by the detection of lane lines in a road image and the importance of accurately defining the region of interest.']}, {'end': 27552.501, 'segs': [{'end': 26540.898, 'src': 'embed', 'start': 26507.376, 'weight': 1, 'content': [{'end': 26512.219, 'text': 'so this is going to create a match color with the same color channel counts.', 'start': 26507.376, 'duration': 4.843}, {'end': 26518.363, 'text': 'now, in the next step, we are going to fill inside the polygon using the fill poly method,', 'start': 26512.219, 'duration': 6.144}, {'end': 26524.987, 'text': 'because we have our region of interest and we want to mask every other thing other than our region of interest.', 'start': 26518.363, 'duration': 6.624}, {'end': 26532.232, 'text': 'so we are going to just say cv2 dot, fill poly, which is going to take few arguments.', 'start': 26525.447, 'duration': 6.785}, {'end': 26540.898, 'text': 'first will be our mask, second will be the vertices which we are providing using the second argument.', 'start': 26532.232, 'duration': 8.666}], 'summary': 'Creating a color match with same channel counts, filling polygon to mask region of interest.', 'duration': 33.522, 'max_score': 26507.376, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ26507376.jpg'}, {'end': 27003.314, 'src': 'embed', 'start': 26977.718, 'weight': 2, 'content': [{'end': 26986.544, 'text': 'but there is one more thing here, which is the edges of our region of interest are also detected.', 'start': 26977.718, 'duration': 8.826}, {'end': 26987.725, 'text': 'so how to solve this?', 'start': 26986.544, 'duration': 1.181}, {'end': 26992.969, 'text': "how to remove these edges, because these edges doesn't interest us?", 'start': 26987.725, 'duration': 5.244}, {'end': 27003.314, 'text': 'the interesting edges here in this image for us are these edges which are of the lanes, road lanes, right?', 'start': 26992.969, 'duration': 10.345}], 'summary': 'Edge detection identifies region of interest and removes non-interest edges, focusing on road lanes.', 'duration': 25.596, 'max_score': 26977.718, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ26977718.jpg'}, {'end': 27060.838, 'src': 'embed', 'start': 27028.007, 'weight': 5, 'content': [{'end': 27035.553, 'text': 'instead of this cropped image which we were getting in the last step from this variable,', 'start': 27028.007, 'duration': 7.546}, {'end': 27043.02, 'text': 'we directly are going to pass our image which we have read using the IAM read method.', 'start': 27035.553, 'duration': 7.467}, {'end': 27051.068, 'text': 'So let me just remove all these line breaks so you will be able to see the code at once.', 'start': 27043.56, 'duration': 7.508}, {'end': 27060.838, 'text': 'So here you can see, I have directly passed now this image variable to the CVT color method.', 'start': 27051.909, 'duration': 8.929}], 'summary': 'Passing the image variable directly to the cvt color method.', 'duration': 32.831, 'max_score': 27028.007, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ27028007.jpg'}, {'end': 27394.848, 'src': 'embed', 'start': 27369.402, 'weight': 0, 'content': [{'end': 27380.811, 'text': "you know that it's going to return the line vector of all the lines which are detected inside of our image, which we have provided as the source here.", 'start': 27369.402, 'duration': 11.409}, {'end': 27385.557, 'text': "So if you don't know what are these parameters which I'm using here,", 'start': 27381.212, 'duration': 4.345}, {'end': 27394.848, 'text': 'you can see my last videos about probabilistic half-line transform and you will be able to know what they actually mean.', 'start': 27385.557, 'duration': 9.291}], 'summary': 'Algorithm detects and returns line vector of all lines in the image.', 'duration': 25.446, 'max_score': 27369.402, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ27369402.jpg'}], 'start': 26154.728, 'title': 'Enhancing vehicle perception with image processing', 'summary': 'Focuses on defining a region of interest for a vehicle to enhance perception, covering the process of defining the region of interest in an image using python and opencv, applying edge detection, detecting lane lines, and utilizing half line transform in computer vision, with specific parameters for edge detection and line detection.', 'chapters': [{'end': 26215.258, 'start': 26154.728, 'title': 'Defining region of interest for vehicle', 'summary': 'Focuses on defining a region of interest for a vehicle, specifically a triangle, to mask out obstructions and distortions, allowing concentration on the defined area, aiming to enhance vehicle perception.', 'duration': 60.53, 'highlights': ['Defining a region of interest for the vehicle to mask obstructions and distortions in the image, focusing on a specific triangle area to enhance vehicle perception.', 'Concentrating on the defined triangle region to mask out any lane lines or other distortions, promoting improved vehicle perception and navigation.', 'Initiating the process by finding out the shape of the image, setting the foundation for defining the region of interest.']}, {'end': 26737.851, 'start': 26215.419, 'title': 'Image processing: region of interest', 'summary': 'Discusses defining the region of interest in an image using python and opencv, including obtaining the height and width of the image, defining vertices for the region of interest, and creating a function to mask everything except the region of interest.', 'duration': 522.432, 'highlights': ['Obtaining the height and width of the image The image dimensions are printed as 704 for the height and 1279 for the width, obtained using the image shape method.', 'Defining vertices for the region of interest The process of defining the vertices for the region of interest, including the left bottom corner, right bottom corner, and the center of the image, is explained.', "Creating a function to mask the region of interest The function 'region of interest' is defined to create a mask for the region of interest, including steps to create a blank matrix, determine color channels, and fill the polygon to mask everything except the region of interest."]}, {'end': 27003.314, 'start': 26738.631, 'title': 'Detecting lane lines with opencv', 'summary': 'Covers the process of masking the region of interest, applying edge detection, and detecting lane lines using opencv, with key steps including defining the region of interest, converting the image to grayscale, applying edge detection, and addressing the detection of unwanted edges within the region of interest.', 'duration': 264.683, 'highlights': ['The process of masking the region of interest is achieved, defining the area for detecting lane lines and masking distractions, facilitating the identification of lane lines within the region of interest. Region of interest defined', 'The next step involves converting the image to grayscale, a fundamental transformation for edge detection, laying the groundwork for further analysis. Image converted to grayscale', 'Edge detection using the Canny method is applied, setting the thresholds at 100 and 200, resulting in the detection of lane line edges as well as the edges of the region of interest, necessitating the elimination of irrelevant edges. Canny edge detection thresholds: 100, 200']}, {'end': 27552.501, 'start': 27003.674, 'title': 'Lane detection and half line transform', 'summary': 'Covers applying edge detection, region of interest, and half line transform in computer vision, using the kenny edge detection to find lane lines, and utilizing the probabilistic half line transform to detect and draw lines, with parameters such as rho=6, theta=np.pi/60, threshold=160, min line length=40, and max line gap=25.', 'duration': 548.827, 'highlights': ['Applying the Kenny edge detection on the original image to find lane lines inside the region of interest. The Kenny edge detection is applied on the original image to detect lane lines inside the region of interest, resulting in improved edge detection for easier line drawing.', 'Utilizing the probabilistic half line transform method with specific parameters to detect and draw lines on the image. The probabilistic half line transform method is used with specific parameters including rho=6, theta=np.pi/60, threshold=160, min line length=40, and max line gap=25 to detect and draw lines on the image.', 'Creating a function to draw the lines on the original image using the line vectors obtained from the half line transform. A function called draw the lines is defined to draw the lines on the original image using the line vectors obtained from the half line transform, simplifying the process.']}], 'duration': 1397.773, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ26154728.jpg', 'highlights': ['Defining a region of interest for the vehicle to mask obstructions and distortions in the image, focusing on a specific triangle area to enhance vehicle perception.', 'Obtaining the height and width of the image The image dimensions are printed as 704 for the height and 1279 for the width, obtained using the image shape method.', 'The process of masking the region of interest is achieved, defining the area for detecting lane lines and masking distractions, facilitating the identification of lane lines within the region of interest. Region of interest defined', 'Edge detection using the Canny method is applied, setting the thresholds at 100 and 200, resulting in the detection of lane line edges as well as the edges of the region of interest, necessitating the elimination of irrelevant edges. Canny edge detection thresholds: 100, 200', 'Applying the Kenny edge detection on the original image to find lane lines inside the region of interest. The Kenny edge detection is applied on the original image to detect lane lines inside the region of interest, resulting in improved edge detection for easier line drawing.', 'Utilizing the probabilistic half line transform method with specific parameters to detect and draw lines on the image. The probabilistic half line transform method is used with specific parameters including rho=6, theta=np.pi/60, threshold=160, min line length=40, and max line gap=25 to detect and draw lines on the image.']}, {'end': 28414.741, 'segs': [{'end': 27846.039, 'src': 'embed', 'start': 27784.481, 'weight': 0, 'content': [{'end': 27789.265, 'text': 'So our original image is the image itself.', 'start': 27784.481, 'duration': 4.784}, {'end': 27791.887, 'text': 'So image variable is our original image.', 'start': 27789.285, 'duration': 2.602}, {'end': 27797.973, 'text': 'And then we are going to just say cv2.addWeighted.', 'start': 27792.428, 'duration': 5.545}, {'end': 27800.895, 'text': 'This function also we have seen in the last videos.', 'start': 27798.033, 'duration': 2.862}, {'end': 27808.959, 'text': 'And this is the function which we use to merge two images with some weights.', 'start': 27801.896, 'duration': 7.063}, {'end': 27812.24, 'text': 'So the first parameter here will be image.', 'start': 27809.559, 'duration': 2.681}, {'end': 27816.062, 'text': 'Now the second parameter here will be the value of alpha.', 'start': 27812.52, 'duration': 3.542}, {'end': 27819.003, 'text': 'So which we are going to give here 8.', 'start': 27816.082, 'duration': 2.921}, {'end': 27823.885, 'text': 'This is like a weight to an image which we want to provide.', 'start': 27819.003, 'duration': 4.882}, {'end': 27827.807, 'text': 'And then the third parameter here will be the second image.', 'start': 27824.505, 'duration': 3.302}, {'end': 27830.908, 'text': 'So we want to merge the blank image with the original image.', 'start': 27827.827, 'duration': 3.081}, {'end': 27834.771, 'text': 'The fourth parameter is the value of beta.', 'start': 27831.608, 'duration': 3.163}, {'end': 27842.176, 'text': 'So this value we are going to take as 1 and the last value will be of gamma.', 'start': 27834.791, 'duration': 7.385}, {'end': 27846.039, 'text': 'So gamma we are going to take as 0.0 here.', 'start': 27842.216, 'duration': 3.823}], 'summary': 'Using cv2.addweighted to merge images with weights. alpha: 8, beta: 1, gamma: 0.0', 'duration': 61.558, 'max_score': 27784.481, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ27784481.jpg'}, {'end': 27906.315, 'src': 'embed', 'start': 27877.245, 'weight': 4, 'content': [{'end': 27888.329, 'text': "So here in the next line, we are going to just define a variable called image with lines, let's say, is equal to our method,", 'start': 27877.245, 'duration': 11.084}, {'end': 27890.009, 'text': 'which is draw the lines method.', 'start': 27888.329, 'duration': 1.68}, {'end': 27892.77, 'text': 'The first argument is the original image.', 'start': 27890.49, 'duration': 2.28}, {'end': 27894.611, 'text': 'So we are going to pass the original image.', 'start': 27892.79, 'duration': 1.821}, {'end': 27906.315, 'text': 'The second argument is the line vector, which we got from this method, right? So the original image and the line vector variable, which we got here.', 'start': 27895.111, 'duration': 11.204}], 'summary': "Defining a variable 'image' with lines and passing original image as the first argument.", 'duration': 29.07, 'max_score': 27877.245, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ27877245.jpg'}, {'end': 28353.096, 'src': 'embed', 'start': 28268.458, 'weight': 2, 'content': [{'end': 28272.9, 'text': 'And whatever we write inside the while loop is going to be executed.', 'start': 28268.458, 'duration': 4.442}, {'end': 28277.584, 'text': 'Now in the next line, we are going to just read every frame.', 'start': 28273.34, 'duration': 4.244}, {'end': 28288.395, 'text': 'So we all know from our previous videos that this cap.read returns two results or two variables.', 'start': 28278.085, 'duration': 10.31}, {'end': 28293.299, 'text': 'One is ret and the other is the frame.', 'start': 28288.735, 'duration': 4.564}, {'end': 28296.082, 'text': 'And we are going to just say cap.read.', 'start': 28294.3, 'duration': 1.782}, {'end': 28301.505, 'text': 'And then we are going to apply our process function on this frame.', 'start': 28298.084, 'duration': 3.421}, {'end': 28312.95, 'text': 'So we are going to once again take this frame variable and we are going to overwrite this frame with the lines on the frames.', 'start': 28302.086, 'duration': 10.864}, {'end': 28316.471, 'text': 'So this we are going to get from our process functions.', 'start': 28313.39, 'duration': 3.081}, {'end': 28322.394, 'text': "Let's call the process function and pass the frame variable inside it.", 'start': 28316.572, 'duration': 5.822}, {'end': 28326.717, 'text': 'okay. so this frame is going to go to the process function,', 'start': 28322.834, 'duration': 3.883}, {'end': 28338.487, 'text': "it's going to process everything and then the final result which we get is going to be saved once again into the frame variable with the actual lines on the frame.", 'start': 28326.717, 'duration': 11.77}, {'end': 28348.374, 'text': 'in the next line we are going to just show our result using cv2 dot I am show method and we are going to just pass the frame variable here in the next line.', 'start': 28338.487, 'duration': 9.887}, {'end': 28353.096, 'text': 'we are going to just write the code for the quitting from this loop.', 'start': 28348.374, 'duration': 4.722}], 'summary': 'Inside while loop, process each frame, apply function, display, and quit.', 'duration': 84.638, 'max_score': 28268.458, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ28268458.jpg'}], 'start': 27553.322, 'title': 'Drawing lines and lane lines with cv2', 'summary': 'Covers drawing lines using cv2 dot line method and looping through line vectors, as well as drawing lane lines on images and video frames using opencv, including merging with original images and modifying lane lines on video frames.', 'chapters': [{'end': 27706.118, 'start': 27553.322, 'title': 'Drawing lines using cv2', 'summary': 'Explains the process of drawing lines using cv2 dot line method and looping through line vectors to draw all the lines found in an image, while specifying the data type as numpy.uint8.', 'duration': 152.796, 'highlights': ['The process involves specifying the data type as numpy.uint8 for the image.', 'Looping through line vectors and drawing all the lines found in the image using a for loop and the draw lines function.', 'Explaining the use of CV2 dot line method to draw lines by specifying the coordinates of the first and second points in the line.']}, {'end': 28414.741, 'start': 27706.118, 'title': 'Drawing lane lines on images and video frames', 'summary': 'Explains the process of drawing lane lines on images and video frames using opencv, illustrating the method for drawing lines on blank images, merging them with original images, and applying the same concept to video frames, and concludes with the demonstration of drawing and modifying lane lines on video frames.', 'duration': 708.623, 'highlights': ['The chapter explains the process of drawing lane lines on images and video frames using OpenCV, illustrating the method for drawing lines on blank images, merging them with original images, and applying the same concept to video frames, and concludes with the demonstration of drawing and modifying lane lines on video frames.', 'The chapter demonstrates the process of drawing lane lines on images, where the thickness and color of the lines can be specified, showcasing the flexibility of changing the color and thickness of the lines with quantifiable examples.', "The chapter concludes with the demonstration of drawing and modifying lane lines on video frames, emphasizing the application of the same concept to video frames for continuous detection of lane lines, providing a clear direction for the next video's focus."]}], 'duration': 861.419, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ27553322.jpg', 'highlights': ['The chapter demonstrates the process of drawing lane lines on images and video frames using OpenCV, illustrating the method for drawing lines on blank images, merging them with original images, and applying the same concept to video frames, and concludes with the demonstration of drawing and modifying lane lines on video frames.', "The chapter concludes with the demonstration of drawing and modifying lane lines on video frames, emphasizing the application of the same concept to video frames for continuous detection of lane lines, providing a clear direction for the next video's focus.", 'Looping through line vectors and drawing all the lines found in the image using a for loop and the draw lines function.', 'Explaining the use of CV2 dot line method to draw lines by specifying the coordinates of the first and second points in the line.', 'The process involves specifying the data type as numpy.uint8 for the image.', 'The chapter explains the process of drawing lane lines on images, where the thickness and color of the lines can be specified, showcasing the flexibility of changing the color and thickness of the lines with quantifiable examples.']}, {'end': 29947.785, 'segs': [{'end': 28668.588, 'src': 'embed', 'start': 28607.672, 'weight': 3, 'content': [{'end': 28618.019, 'text': 'So here x center and the y center are the coordinates of the center and R here is the radius of the circle.', 'start': 28607.672, 'duration': 10.347}, {'end': 28624.46, 'text': 'So if you know these three parameters, then you can draw a circle.', 'start': 28618.479, 'duration': 5.981}, {'end': 28630.282, 'text': 'So the coordinates of the circle and the radius of the circle we need to detect.', 'start': 28624.88, 'duration': 5.402}, {'end': 28637.864, 'text': "So now let's see how Hough Circle method is applied using OpenCV.", 'start': 28631.262, 'duration': 6.602}, {'end': 28647.891, 'text': 'so you might observe here that i have created a copy of this original image, which i have read using this iam read method.', 'start': 28638.624, 'duration': 9.267}, {'end': 28653.535, 'text': "in the next step i'm going to just convert this image into a grayscale image.", 'start': 28647.891, 'duration': 5.644}, {'end': 28664.644, 'text': "so i'm going to just write gray is equal to cv dot, cvt color, which is going to take two parameters.", 'start': 28653.535, 'duration': 11.109}, {'end': 28668.588, 'text': 'First is the source and second is the method.', 'start': 28664.704, 'duration': 3.884}], 'summary': 'Hough circle method in opencv applies circle detection using grayscale images.', 'duration': 60.916, 'max_score': 28607.672, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ28607672.jpg'}, {'end': 29017.173, 'src': 'embed', 'start': 28984.516, 'weight': 2, 'content': [{'end': 28990.417, 'text': "And then in the parentheses, I'm going to just use np.around.", 'start': 28984.516, 'duration': 5.901}, {'end': 28998.761, 'text': 'And we are going to pass our circles parameter which we got using the half circles method.', 'start': 28990.917, 'duration': 7.844}, {'end': 29003.344, 'text': 'now, in the next step, we are going to iterate over those detected circles.', 'start': 28998.761, 'duration': 4.583}, {'end': 29017.173, 'text': 'so we are going to just say for and because this circle vector is going to give us x, y and the radius, we can directly just extract those values.', 'start': 29003.344, 'duration': 13.829}], 'summary': 'Using np.around, we iterate over detected circles to extract x, y, and radius.', 'duration': 32.657, 'max_score': 28984.516, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ28984516.jpg'}, {'end': 29219.001, 'src': 'embed', 'start': 29131.054, 'weight': 0, 'content': [{'end': 29141.586, 'text': "that's why this value is very small And we are going to just say that this will be also 3, and let's change the color of this dot.", 'start': 29131.054, 'duration': 10.532}, {'end': 29144.47, 'text': "Let's say this will be this color.", 'start': 29141.626, 'duration': 2.844}, {'end': 29154.054, 'text': 'Okay, so we are just drawing those circles on the copy of the image which is called the output.', 'start': 29145.467, 'duration': 8.587}, {'end': 29158.697, 'text': "So let's run this code and let's see what happens when we run this code.", 'start': 29154.714, 'duration': 3.983}, {'end': 29170.527, 'text': 'And you can see this dot is first of all drawn on each circle which is detected which is in the form of yellow.', 'start': 29159.438, 'duration': 11.089}, {'end': 29176.372, 'text': 'And also in the form of green all the circles are drawn.', 'start': 29171.287, 'duration': 5.085}, {'end': 29179.194, 'text': 'So you can see this circle is drawn.', 'start': 29176.512, 'duration': 2.682}, {'end': 29188.702, 'text': 'So every circular shape is enclosed by the detected circle.', 'start': 29179.394, 'duration': 9.308}, {'end': 29199.15, 'text': 'We also strangely detected this circle somehow because OpenCV think that this is also a circle.', 'start': 29189.302, 'duration': 9.848}, {'end': 29202.893, 'text': 'I have one more image which is shapes.jpg.', 'start': 29199.35, 'duration': 3.543}, {'end': 29207.035, 'text': 'So we are going to just see that also.', 'start': 29203.013, 'duration': 4.022}, {'end': 29211.377, 'text': "so I'm going to just say shapes.jpg.", 'start': 29207.035, 'duration': 4.342}, {'end': 29213.618, 'text': 'let me show you this image first of all.', 'start': 29211.377, 'duration': 2.241}, {'end': 29219.001, 'text': 'so it looks like this so it has only one circle and some other shapes, right.', 'start': 29213.618, 'duration': 5.383}], 'summary': 'Using computer vision, detected and drew circles from image, displaying yellow and green circles.', 'duration': 87.947, 'max_score': 29131.054, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ29131054.jpg'}], 'start': 28415.021, 'title': 'Image processing techniques', 'summary': 'Covers lane and circle detection in opencv, half circle method, detecting and drawing circles, and haar cascade for face detection, providing insights into adjusting variables, specific parameters, and application of classifiers for detection in images and videos.', 'chapters': [{'end': 28637.864, 'start': 28415.021, 'title': 'Lane & circle detection in opencv', 'summary': 'Discusses the detection of lane lines on the road by adjusting variables, improving the results, and then transitions to detecting circles in an image using half circle transform in opencv.', 'duration': 222.843, 'highlights': ['Adjusting Variables for Lane Detection The script demonstrates adjusting variables such as max line gap, threshold value, and row value to improve the lane detection results.', 'Improved Lane Detection The chapter shows the process of progressively improving the lane detection results by modifying the threshold value for edge detection, resulting in clearer drawn lines on the road.', 'Introduction to Half Circle Transform The chapter introduces the concept of using half circle transform to detect circles in an image, providing a mathematical representation of a circle and its parameters.']}, {'end': 28896.112, 'start': 28638.624, 'title': 'Image processing: half circles method', 'summary': 'Discusses creating a grayscale image, applying median blur, and using cv half circles method with specific parameters like dp, min dist, and param1 and param2.', 'duration': 257.488, 'highlights': ['Creating a grayscale image using the cvtColor method to convert the color BGR to grey.', 'Applying median blur with a kernel size of 5 to the grayscale image to prepare for the half circles method.', 'Using the CV half circles method with parameters like DP (set at 1), min dist (initially 20), and specific method-specific parameters Param1 (set at 50) and Param2 (set at 30).']}, {'end': 29219.001, 'start': 28897.193, 'title': 'Detecting and drawing circles', 'summary': 'Explains the process of detecting and drawing circles using the min and max radius parameters, converting circle parameters to integers, drawing circles and centers, and the output of the detection process.', 'duration': 321.808, 'highlights': ['The chapter explains the process of detecting and drawing circles using the min and max radius parameters, converting circle parameters to integers, drawing circles and centers, and the output of the detection process.', 'The min radius and max radius parameters are introduced, with the min radius starting at 0 and the max radius utilizing the maximum image dimension if greater than or equal to 0.', 'The detected circles are converted into integers using numpy, and then iterated over to draw both the circles and their centers on the image.', 'The process of drawing circles involves specifying the center coordinates, radius, color, and thickness, with a demonstration of the detection output using an example image.']}, {'end': 29947.785, 'start': 29219.001, 'title': 'Face detection using haar cascade', 'summary': 'Discusses the haar feature-based cascade classifiers for detecting faces, outlining the training process and the application of the classifier to detect faces in images and videos using opencv.', 'duration': 728.784, 'highlights': ['Haar feature-based cascade classifiers is a machine learning based approach where a cascade function is trained for a lot of positive and negative images. It describes the machine learning approach of training a cascade function with positive and negative images.', 'The classifier is trained with hundreds of sample views of a particular object, such as a face, and the negative images are those that do not contain the object being detected. Explains the training process of the classifier with positive and negative images.', 'OpenCV provides trained classifier XML files for various objects, such as faces, and the process of obtaining and using these files is demonstrated. Describes the availability and usage of pre-trained classifier XML files for object detection.', 'The process of using the Haar cascade classifier to detect faces is explained, including converting the image to grayscale and specifying parameters for detecting faces. Details the process of using the Haar cascade classifier to detect faces in an image.', 'The chapter also demonstrates the application of the Haar cascade classifier for face detection in videos, by applying the detection process to each frame of the video. Illustrates the application of Haar cascade classifier for face detection in videos, by applying the detection process to each frame.']}], 'duration': 1532.764, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ28415021.jpg', 'highlights': ['Improved Lane Detection The chapter shows the process of progressively improving the lane detection results by modifying the threshold value for edge detection, resulting in clearer drawn lines on the road.', 'Adjusting Variables for Lane Detection The script demonstrates adjusting variables such as max line gap, threshold value, and row value to improve the lane detection results.', 'Introduction to Half Circle Transform The chapter introduces the concept of using half circle transform to detect circles in an image, providing a mathematical representation of a circle and its parameters.', 'The chapter explains the process of detecting and drawing circles using the min and max radius parameters, converting circle parameters to integers, drawing circles and centers, and the output of the detection process.', 'Haar feature-based cascade classifiers is a machine learning based approach where a cascade function is trained for a lot of positive and negative images. It describes the machine learning approach of training a cascade function with positive and negative images.', 'The classifier is trained with hundreds of sample views of a particular object, such as a face, and the negative images are those that do not contain the object being detected. Explains the training process of the classifier with positive and negative images.', 'OpenCV provides trained classifier XML files for various objects, such as faces, and the process of obtaining and using these files is demonstrated. Describes the availability and usage of pre-trained classifier XML files for object detection.', 'The process of using the Haar cascade classifier to detect faces is explained, including converting the image to grayscale and specifying parameters for detecting faces. Details the process of using the Haar cascade classifier to detect faces in an image.', 'The chapter also demonstrates the application of the Haar cascade classifier for face detection in videos, by applying the detection process to each frame of the video. Illustrates the application of Haar cascade classifier for face detection in videos, by applying the detection process to each frame.']}, {'end': 31342.314, 'segs': [{'end': 30074.718, 'src': 'embed', 'start': 30040.577, 'weight': 0, 'content': [{'end': 30043.539, 'text': 'And now we are ready to write our code.', 'start': 30040.577, 'duration': 2.962}, {'end': 30046.701, 'text': 'So this is the code which we have written last time.', 'start': 30043.699, 'duration': 3.002}, {'end': 30051.425, 'text': "So if you don't know how this code works, you can see the last video.", 'start': 30046.842, 'duration': 4.583}, {'end': 30054.728, 'text': "I'm going to just extend this code to detect eyes.", 'start': 30051.926, 'duration': 2.802}, {'end': 30062.872, 'text': 'So first thing, first we need to create the cascade classifier for the eyes.', 'start': 30055.508, 'duration': 7.364}, {'end': 30074.718, 'text': 'So, instead of face cascade, we are going to name it as eye cascade, and this file name will be the file which we have downloaded,', 'start': 30063.432, 'duration': 11.286}], 'summary': 'Code extended to detect eyes using cascade classifier.', 'duration': 34.141, 'max_score': 30040.577, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ30040577.jpg'}, {'end': 30511.829, 'src': 'embed', 'start': 30476.641, 'weight': 3, 'content': [{'end': 30488.13, 'text': 'so this r value which is computed is going to give us the estimate or give us an idea about where this corner is located,', 'start': 30476.641, 'duration': 11.489}, {'end': 30490.111, 'text': 'depending upon the value of r.', 'start': 30488.13, 'duration': 1.981}, {'end': 30500.159, 'text': 'And in the third step, after applying a threshold to this score, the important corners are selected and marked.', 'start': 30491.452, 'duration': 8.707}, {'end': 30505.203, 'text': 'So let me explain you all these steps one by one.', 'start': 30500.88, 'duration': 4.323}, {'end': 30511.829, 'text': 'What do I mean by detecting the windows and calculating the value of Rs.', 'start': 30505.944, 'duration': 5.885}], 'summary': 'R value estimates corner location, important corners are selected and marked.', 'duration': 35.188, 'max_score': 30476.641, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ30476641.jpg'}], 'start': 29948.166, 'title': 'Real-time face and eye detection', 'summary': 'Covers real-time face detection using har based cascade classifiers, extends to eye detection, explains selecting the face as the region of interest, and demonstrates detecting eyes in a face using opencv and harris corner detector method, aiming to implement a real-time face and eye detection system with insights into parameters and techniques used.', 'chapters': [{'end': 30087.246, 'start': 29948.166, 'title': 'Real-time face and eye detection', 'summary': 'Demonstrates real-time face detection using har based cascade classifiers, and extends the code to detect eyes using a pre-trained classifier from the opencv repository.', 'duration': 139.08, 'highlights': ['The video showcases real-time face detection using HAR based cascade classifiers.', 'Extending the code to detect eyes using a pre-trained classifier from the OpenCV repository.', 'Instructions on downloading the pre-trained classifier for eyes from the OpenCV repository are provided.', 'The process of creating a cascade classifier for eyes and the naming convention for the file is explained.']}, {'end': 30321.59, 'start': 30087.246, 'title': 'Face region of interest and eye detection', 'summary': 'Explains the process of selecting the face as the region of interest, extracting the grayscale and colored regions of interest, and detecting and drawing rectangles around the eyes within the face using opencv, with the aim to implement a real-time face and eye detection system.', 'duration': 234.344, 'highlights': ['The chapter outlines the process of selecting the face as the region of interest, extracting the grayscale and colored regions of interest, and detecting and drawing rectangles around the eyes within the face using OpenCV, with the aim to implement a real-time face and eye detection system.', 'The code iterates over the detected eyes within the face and draws rectangles around them using the cv2.rectangle method, with a specific color and width, aiming to visually mark the detected eyes within the face region.', 'A key point of the chapter is the utilization of the detectMultiScale method to detect eyes within the region of interest, enabling the real-time detection of eyes within the face region.']}, {'end': 30583.583, 'start': 30322.23, 'title': 'Detecting eyes using opencv and harris corner detector', 'summary': 'Covers detecting eyes in a face using opencv and haar cascade classifiers, and understanding harris corner detector method for finding corners inside an image, with an explanation of the three main steps involved in harris corner detection.', 'duration': 261.353, 'highlights': ['The chapter covers detecting eyes in a face using OpenCV and Haar cascade classifiers, and understanding Harris Corner Detector method for finding corners inside an image, with an explanation of the three main steps involved in Harris Corner Detection.', 'Harris Corner Detector was first introduced by Chris Harris and Mike Stephens in their paper in 1988, and it contains three main steps for detecting corners in an image.', 'The first step in Harris Corner Detection involves determining which windows produce very large variation in intensity in the x and y directions, while the second step computes a score, r, for each window to estimate the location of corners, and the third step selects and marks important corners after applying a threshold to the score.']}, {'end': 30803.86, 'start': 30583.583, 'title': 'Harris corner detector', 'summary': "Explains the harris corner detection method, starting with the mathematical steps to detect corners, calculating the score for r, and making decisions based on the value of r, determining if it's a corner, an edge, or a flat region.", 'duration': 220.277, 'highlights': ['The Harris Corner Detection method involves maximizing a function using a Taylor expansion, resulting in the calculation of the score for R based on the eigenvalues of m.', 'The value of R determines whether a region is a corner, an edge, or a flat area, with specific conditions based on the comparison of eigenvalues lambda1 and lambda2.', 'Ix and Iy, the image derivatives in the x and y direction, can be easily found using the cv.sobl method in OpenCV.']}, {'end': 31342.314, 'start': 30804.52, 'title': 'Corner detection in opencv', 'summary': 'Demonstrates the process of corner detection in opencv, including converting images to grayscale, applying harris corner and shi-tomasi methods, and marking the detected corners, providing insights into the parameters and techniques used.', 'duration': 537.794, 'highlights': ['The Shi-Tomasi method provides better results compared to the Harris corner detector and allows specifying the number of top corners to detect. The Shi-Tomasi method gives better results than the Harris corner detector and allows specifying the number of top corners to detect, providing more control over the corner detection process.', 'The CV2.CornerHarris method is applied to the grayscale image, using specified parameters like block size and aperture parameter. The CV2.CornerHarris method is applied to the grayscale image with specified parameters such as block size and aperture parameter, essential for the corner detection process.', 'The CV.goodFeaturesToTrack method is employed to detect corners in the grayscale image, allowing the specification of the maximum number of corners to detect and the quality level. The CV.goodFeaturesToTrack method is used to detect corners in the grayscale image, allowing the specification of the maximum number of corners to detect and the quality level, providing control over the corner detection.']}], 'duration': 1394.148, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ29948166.jpg', 'highlights': ['The video showcases real-time face detection using HAR based cascade classifiers.', 'The chapter outlines the process of selecting the face as the region of interest, extracting the grayscale and colored regions of interest, and detecting and drawing rectangles around the eyes within the face using OpenCV, with the aim to implement a real-time face and eye detection system.', 'The chapter covers detecting eyes in a face using OpenCV and Haar cascade classifiers, and understanding Harris Corner Detector method for finding corners inside an image, with an explanation of the three main steps involved in Harris Corner Detection.', 'The Harris Corner Detection method involves maximizing a function using a Taylor expansion, resulting in the calculation of the score for R based on the eigenvalues of m.', 'The Shi-Tomasi method provides better results compared to the Harris corner detector and allows specifying the number of top corners to detect.']}, {'end': 33826.765, 'segs': [{'end': 31374.647, 'src': 'embed', 'start': 31343.175, 'weight': 2, 'content': [{'end': 31353.528, 'text': 'And at last, once all the circles are drawn on the corner which are detected, then we are just showing this using IMSHOW method.', 'start': 31343.175, 'duration': 10.353}, {'end': 31361.297, 'text': "So let's see how this works in the case of Shi-Tomasi method on an image.", 'start': 31354.229, 'duration': 7.068}, {'end': 31374.647, 'text': "So I'm going to run this code so you can see all the corners inside this image are detected, and because we have just provided this number 25 here,", 'start': 31361.978, 'duration': 12.669}], 'summary': 'Shi-tomasi method detects 25 corners on image.', 'duration': 31.472, 'max_score': 31343.175, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ31343175.jpg'}, {'end': 31994.71, 'src': 'embed', 'start': 31961.861, 'weight': 10, 'content': [{'end': 31968.783, 'text': 'There is one more method, which is called the background subtractor GMG.', 'start': 31961.861, 'duration': 6.922}, {'end': 31978.867, 'text': "So this algorithm which we are going to use, so let's use this method first of all, which is called background subtractor GMG.", 'start': 31969.564, 'duration': 9.303}, {'end': 31987.408, 'text': 'which is available under cv.bgsegment as the first method.', 'start': 31982.008, 'duration': 5.4}, {'end': 31994.71, 'text': 'So just write bgsegm.createBackgroundSubtractorGMG method.', 'start': 31987.488, 'duration': 7.222}], 'summary': 'Using the background subtractor gmg method from the cv.bgsegment library.', 'duration': 32.849, 'max_score': 31961.861, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ31961861.jpg'}, {'end': 32135.086, 'src': 'embed', 'start': 32071.344, 'weight': 4, 'content': [{'end': 32073.386, 'text': 'So we need to define the kernel also.', 'start': 32071.344, 'duration': 2.042}, {'end': 32078.652, 'text': "So for defining the kernel, let's define the kernel outside this while loop.", 'start': 32074.086, 'duration': 4.566}, {'end': 32083.818, 'text': "So I'm going to just write kernel which takes few argument.", 'start': 32078.672, 'duration': 5.146}, {'end': 32084.799, 'text': 'First is the shape.', 'start': 32083.858, 'duration': 0.941}, {'end': 32090.846, 'text': 'So we are going to say we want the morph eclipse shape.', 'start': 32085.199, 'duration': 5.647}, {'end': 32092.007, 'text': "So I'm going to just write.", 'start': 32090.866, 'duration': 1.141}, {'end': 32099.889, 'text': "morph eclipse and then the kernel size will be, let's say, three comma three.", 'start': 32092.988, 'duration': 6.901}, {'end': 32113.112, 'text': 'okay, so we are going to apply this kernel using this morphology x method and when we are going to run this code, you can see these kind of results,', 'start': 32099.889, 'duration': 13.223}, {'end': 32119.473, 'text': 'which are not as good as you have seen in the first method.', 'start': 32113.112, 'duration': 6.361}, {'end': 32129.501, 'text': 'Now let me show you the last background subtraction method, which is called the background subtractor, KNN method.', 'start': 32119.713, 'duration': 9.788}, {'end': 32135.086, 'text': 'So this method is available under CV2 directly.', 'start': 32130.182, 'duration': 4.904}], 'summary': 'Defining a morph eclipse kernel of size 3x3 for image processing.', 'duration': 63.742, 'max_score': 32071.344, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ32071344.jpg'}, {'end': 32247.875, 'src': 'embed', 'start': 32222.075, 'weight': 5, 'content': [{'end': 32228.217, 'text': 'in this video we will talk about an object tracking method, which is called mean shift.', 'start': 32222.075, 'duration': 6.142}, {'end': 32230.898, 'text': 'so, first of all, what is object tracking?', 'start': 32228.217, 'duration': 2.681}, {'end': 32240.347, 'text': 'So, in simple words, object tracking is the process of locating a moving object over time using a camera.', 'start': 32231.658, 'duration': 8.689}, {'end': 32245.192, 'text': 'And what is mean shift? The idea behind mean shift is really simple.', 'start': 32240.627, 'duration': 4.565}, {'end': 32247.875, 'text': 'Consider you have a set of points.', 'start': 32245.792, 'duration': 2.083}], 'summary': 'Mean shift is an object tracking method that locates moving objects using a camera.', 'duration': 25.8, 'max_score': 32222.075, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ32222075.jpg'}, {'end': 32638.859, 'src': 'embed', 'start': 32603.226, 'weight': 6, 'content': [{'end': 32611.812, 'text': "But first of all, let's just see the region of interest because we already have our region of interest.", 'start': 32603.226, 'duration': 8.586}, {'end': 32613.073, 'text': "So I'm going to just write CV.", 'start': 32611.832, 'duration': 1.241}, {'end': 32617.717, 'text': "dot I'm sure and our region of interest.", 'start': 32613.853, 'duration': 3.864}, {'end': 32621.722, 'text': "So let's say how our region of interest looks like.", 'start': 32617.757, 'duration': 3.965}, {'end': 32630.11, 'text': 'So I have this video and this image, which is our region of interest, right?', 'start': 32622.442, 'duration': 7.668}, {'end': 32638.859, 'text': "so this is the initial position i'm going to pass to our mean shift function right.", 'start': 32630.871, 'duration': 7.988}], 'summary': 'Defining the region of interest for mean shift function.', 'duration': 35.633, 'max_score': 32603.226, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ32603226.jpg'}, {'end': 32773.852, 'src': 'embed', 'start': 32741.229, 'weight': 1, 'content': [{'end': 32749.574, 'text': 'so the lower limit will be 0 dot, comma 60 dot, comma 32 dot.', 'start': 32741.229, 'duration': 8.345}, {'end': 32754.217, 'text': "okay, so let's pass this and the upper limit.", 'start': 32749.574, 'duration': 4.643}, {'end': 32757.179, 'text': "so let's define the upper limit also.", 'start': 32754.217, 'duration': 2.962}, {'end': 32762.742, 'text': 'so the third parameter will be the upper limit in the form of the tuple.', 'start': 32757.179, 'duration': 5.563}, {'end': 32765.324, 'text': 'but we need to use the numpy for that.', 'start': 32762.742, 'duration': 2.582}, {'end': 32773.852, 'text': 'right. so numpy dot array and inside that we just pass this tuple value, which will be 180.255.255.', 'start': 32765.324, 'duration': 8.528}], 'summary': 'Lower limit: 0.60.32, upper limit: 180.255.255', 'duration': 32.623, 'max_score': 32741.229, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ32741229.jpg'}, {'end': 33261.546, 'src': 'embed', 'start': 33223.458, 'weight': 11, 'content': [{'end': 33235.441, 'text': 'Once we have our track window for the car, we can draw a rectangle with the help of this track window, and this will be visible on our video.', 'start': 33223.458, 'duration': 11.983}, {'end': 33240.201, 'text': 'So we are going to draw that window.', 'start': 33236.161, 'duration': 4.04}, {'end': 33249.944, 'text': 'We are going to just say x, y, w, h for x, y width and height.', 'start': 33240.222, 'duration': 9.722}, {'end': 33253.184, 'text': 'And this will be our track window.', 'start': 33250.604, 'duration': 2.58}, {'end': 33256.845, 'text': 'And then we are going to just draw a rectangle.', 'start': 33253.904, 'duration': 2.941}, {'end': 33261.546, 'text': "So I'm going to just say we have the final rectangle.", 'start': 33256.864, 'duration': 4.682}], 'summary': 'Car track window used to draw a visible rectangle on the video.', 'duration': 38.088, 'max_score': 33223.458, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ33223458.jpg'}, {'end': 33750.491, 'src': 'embed', 'start': 33728.78, 'weight': 8, 'content': [{'end': 33737.786, 'text': 'And now we can just draw our rectangle But remember this is a rotating rectangle so we cannot use this normal rectangle function.', 'start': 33728.78, 'duration': 9.006}, {'end': 33742.408, 'text': 'So we need to use the other function for drawing those points.', 'start': 33738.006, 'duration': 4.402}, {'end': 33750.491, 'text': "So I'm going to define this final image variable once again and then I'm going to use cv.polylines.", 'start': 33742.928, 'duration': 7.563}], 'summary': 'Drawing a rotating rectangle using cv.polylines', 'duration': 21.711, 'max_score': 33728.78, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ33728780.jpg'}, {'end': 33826.765, 'src': 'embed', 'start': 33811.921, 'weight': 0, 'content': [{'end': 33819.003, 'text': 'so you can see this rectangle is drawn and it can rotate, also with the object.', 'start': 33811.921, 'duration': 7.082}, {'end': 33823.424, 'text': 'so this is how cam shift algorithm works with opencv.', 'start': 33819.003, 'duration': 4.421}, {'end': 33826.765, 'text': "i hope you've enjoyed this video and i will see you in the next video.", 'start': 33823.424, 'duration': 3.341}], 'summary': 'Cam shift algorithm rotates rectangle with object in opencv.', 'duration': 14.844, 'max_score': 33811.921, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ33811921.jpg'}], 'start': 31343.175, 'title': 'Object tracking and background subtraction in opencv', 'summary': 'Covers the shi-tomasi corner detector, background subtraction methods including mog, mog2, gmg, and knn in opencv, object tracking with mean shift algorithm, histogram calculation, and the cam-shift algorithm, with applications in visitor counting and traffic monitoring.', 'chapters': [{'end': 31581.056, 'start': 31343.175, 'title': 'Shi-tomasi corner detector', 'summary': 'Demonstrates the working of shi-tomasi corner detector and background subtraction method in opencv, as well as the concept of background subtraction and its applications, such as in visitor counting and traffic monitoring.', 'duration': 237.881, 'highlights': ['Shi Tomasi Corner Detector gives better results than Harris Corner Detector and allows control over the number of corners detected, with important corners being detected in a better way.', 'Background subtraction is a widely used technique for generating a foreground mask from images captured using a static camera, and it can be applied in scenarios like visitor counting and traffic monitoring.', 'OpenCV has implemented several algorithms for background subtraction, which will be demonstrated one by one in the chapter.', 'Background subtraction calculates the foreground mask by performing subtraction between the current frame and the background model containing the static part of the scene.']}, {'end': 32222.075, 'start': 31581.056, 'title': 'Background subtraction methods in opencv', 'summary': 'Discusses various background subtraction methods in opencv, including gaussian mixture-based algorithms like mog and mog2, gmg algorithm, and knn method, showcasing their performance and optional parameters, such as detecting shadows.', 'duration': 641.019, 'highlights': ['The chapter discusses various background subtraction methods in OpenCV, including Gaussian mixture-based algorithms like MOG and MOG2, GMG algorithm, and KNN method The chapter covers different background subtraction methods such as MOG, MOG2, GMG, and KNN in OpenCV, providing a comprehensive overview of available techniques.', 'The GMG algorithm combines statistical background image estimation and per-pixel bias in segmentation The GMG algorithm combines statistical background image estimation and per-pixel bias for segmentation, showcasing a unique approach to background subtraction.', "MOG2 method allows detecting shadows with an optional parameter 'detectShadows' The MOG2 method includes an optional parameter 'detectShadows' to enable or disable shadow detection, offering flexibility in handling shadows in the foreground mask.", 'KNN method also offers an optional parameter for detecting shadows The KNN method provides an optional parameter for detecting shadows, allowing users to control the shadow detection feature based on their specific requirements.']}, {'end': 32773.852, 'start': 32222.075, 'title': 'Object tracking with mean shift', 'summary': 'Introduces the mean shift algorithm for object tracking, highlighting its process, including the initial location of the target object, the histogram back projected image, and the movement of the window to the area of maximum pixel density, with a demonstration using a video of slow traffic.', 'duration': 551.777, 'highlights': ['The process of mean shift algorithm for object tracking involves passing the initial location of the target object and the histogram back projected image to a mean shift function, followed by the movement of the window to the new location with the maximum probability density. The mean shift algorithm involves passing the initial location of the target object and the histogram back projected image to a mean shift function, then moving the window to the new location with the maximum probability density.', 'The chapter demonstrates the tracking of a white car window using mean shift algorithm, where the initial position of the car window is hard-coded as 200, 100, 50. The demonstration includes tracking the initial position of the car window, hard-coded as 200, 100, 50, using the mean shift algorithm.', 'The process involves defining the region of interest (ROI) and converting it to the HSV color space, followed by calculating the mask using the lower and upper bounds. The process includes defining the region of interest (ROI), converting it to the HSV color space, and calculating the mask using the lower and upper bounds.']}, {'end': 33223.278, 'start': 32773.853, 'title': 'Histogram calculation and mean shift', 'summary': 'Explains the use of inrange function to discard low light values in the histogram calculation process, followed by the application of calcbackproject and mean shift to track moving objects in the hsv color space.', 'duration': 449.425, 'highlights': ['The inRange function is used to discard low light values and consider only hue from HSV for histogram calculation. The inRange function is used to discard low light values and consider only the hue channel from HSV for histogram calculation in the range of 0 to 255.', 'CalcBackProject function is used to calculate the back projected image based on the histogram values. The calcBackProject function is used to calculate the back projected image based on the histogram values and apply mean shift to track moving objects.', 'Mean shift is applied using cv.meanShift function with termination criteria set for 10 iterations or moving by at least one point. Mean shift is applied using cv.meanShift function with termination criteria set for 10 iterations or moving by at least one point to track the new location of the object.']}, {'end': 33826.765, 'start': 33223.458, 'title': 'Object tracking with cam shift algorithm', 'summary': 'Discusses the implementation of the mean shift algorithm for object tracking in opencv, highlighting its limitations such as the fixed target window size and the necessity of providing the initial position of the region of interest. it then introduces the cam-shift algorithm, which addresses these limitations by continuously adapting the window size and calculating the orientation of the best-fitting ellipse, with an example of its implementation and the visualization of the rotating rectangle.', 'duration': 603.307, 'highlights': ['The CAM-SHIFT algorithm addresses the limitations of the mean shift algorithm by continuously adapting the window size and calculating the orientation of the best-fitting ellipse, thus allowing the size of the target window to change and eliminating the need to provide the initial position of the region of interest.', "The mean shift algorithm has limitations, including the fixed size of the target window, which does not change as the object's distance from the camera changes, and the requirement to provide the initial position of the region of interest.", 'The CAM-SHIFT algorithm applies mean shift first and then updates the size of the window and calculates the orientation of the best-fitting ellipse to improve object tracking.', "The implementation of the CAM-SHIFT algorithm involves using the 'cv2.CamShift' function with parameters such as destination, track window, and termination criteria.", "The 'cv2.CamShift' function returns a rotated rectangle as the result, which can be visualized and used for further iterations, providing the values of x, y, width, height, and rotation.", "To draw the rotating rectangle obtained from the 'cv2.CamShift' function, the 'cv2.boxPoints' function is used to obtain the points, which are then converted to integers and drawn using the 'cv2.polylines' function with parameters for frame, points, color, and thickness."]}], 'duration': 2483.59, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/N81PCpADwKQ/pics/N81PCpADwKQ31343175.jpg', 'highlights': ['Shi Tomasi Corner Detector gives better results than Harris Corner Detector and allows control over the number of corners detected, with important corners being detected in a better way.', 'Background subtraction is a widely used technique for generating a foreground mask from images captured using a static camera, and it can be applied in scenarios like visitor counting and traffic monitoring.', 'OpenCV has implemented several algorithms for background subtraction, which will be demonstrated one by one in the chapter.', 'The chapter covers different background subtraction methods such as MOG, MOG2, GMG, and KNN in OpenCV, providing a comprehensive overview of available techniques.', 'The GMG algorithm combines statistical background image estimation and per-pixel bias for segmentation, showcasing a unique approach to background subtraction.', "MOG2 method allows detecting shadows with an optional parameter 'detectShadows', offering flexibility in handling shadows in the foreground mask.", 'The process of mean shift algorithm for object tracking involves passing the initial location of the target object and the histogram back projected image to a mean shift function, followed by the movement of the window to the new location with the maximum probability density.', 'The chapter demonstrates the tracking of a white car window using mean shift algorithm, where the initial position of the car window is hard-coded as 200, 100, 50.', 'The inRange function is used to discard low light values and consider only the hue channel from HSV for histogram calculation in the range of 0 to 255.', 'Mean shift is applied using cv.meanShift function with termination criteria set for 10 iterations or moving by at least one point to track the new location of the object.', 'The CAM-SHIFT algorithm addresses the limitations of the mean shift algorithm by continuously adapting the window size and calculating the orientation of the best-fitting ellipse, thus allowing the size of the target window to change and eliminating the need to provide the initial position of the region of interest.', "The implementation of the CAM-SHIFT algorithm involves using the 'cv2.CamShift' function with parameters such as destination, track window, and termination criteria."]}], 'highlights': ['OpenCV is an open source computer vision library, enabling machines to see and process visual data like humans, with applications in self-driving cars and social media image recognition.', 'Computer vision involves analyzing images to produce useful information, such as detecting lanes in self-driving cars and recognizing faces in social media images.', 'OpenCV, standing for Open Source Computer Vision, is a cross-platform library available on Mac, Windows, and various Linux operating systems, supporting C, C++, and Python, and licensed under BSD license.', 'Digital images are stored in the form of matrices and can be classified into grayscale images, which have one channel, and colored images, which have three channels (RGB).', 'The concept of PPI (pixel per inch) refers to the display resolution, indicating how many individual pixels are displayed in one inch of a digital image.', 'Grayscale images represent the intensity of only one shade, while colored images utilize three channels (red, green, blue) to represent color information.', "The installation process involves choosing the 'customize installation' option, adding Python 3.7 to the path, and specifying the installation location, such as the C directory.", 'The process of installing OpenCV using pip is explained, with emphasis on the automatic installation of the NumPy package alongside OpenCV, and the subsequent verification of the OpenCV installation through Python and Visual Studio Code.', 'The chapter illustrates how to write an image to a file using the imwrite method, and showcases the creation of a new file with the specified image name, providing insights into image writing and file creation.', 'The script captures video at a resolution of 640x480 using a tuple format, resulting in efficient video processing.', "The chapter demonstrates how to overlay the width and height information on a live video using OpenCV's putText method.", 'The chapter provides guidance on obtaining the 4cc code and setting it for the VideoWriter class.', 'The chapter covers bitwise operations on images using Python and OpenCV, which is the main topic of the chapter.', 'Creating trackbars for BGR values in an OpenCV window, allowing the user to change the BGR channel values from 0 to 255.', 'Using callback functions to print the current position of the trackbar whenever its value changes, enabling users to see the corresponding value for each trackbar.', 'Demonstrates the use of track bars in OpenCV to dynamically change the color and appearance of an image, showcasing the practical application of track bars in OpenCV.', 'Object Detection using HSV Color Space demonstrating the process of converting a colored image to an HSV image and then using thresholding to detect and isolate blue colored balls, with the potential to detect other colored balls as well.', 'The chapter demonstrates object tracking and detection using HSV color space, with a focus on tracking a blue colored object, resulting in successful masking and object tracking.', 'Matplotlib is a 2D plotting library used with OpenCV to display graphs, images, and histograms, enhancing visualization in Python.', 'OpenCV reads images in BGR format, while Matplotlib reads them in RGB format, requiring the conversion of images from BGR to RGB format for accurate display in Matplotlib.', 'The process of applying thresholding to create a mask for image transformation is explained, detailing the use of cv2.threshold for creating a mask, providing an example with a threshold value of 220 and visualizing the masked image using matplotlib.', "The application of morphological transformations such as dilation to remove noise and modify the image's features is demonstrated, illustrating the use of cv2.dilate to remove black dots from the image, explaining the concept of a kernel and the impact of iteration on the dilation process.", 'Morphological transformations include dilation, erosion, opening, closing, morphological gradient, and top hat.', 'The application of Gaussian blur and bilateral filter resulted in better noise removal and edge preservation compared to the homogeneous filter and averaging techniques.', 'The Laplacian method, Sobel X method, and Sobel Y method are three different gradient functions available in OpenCV, used to find edges and directional changes in image intensity or color.', 'Canny edge detection produces precise edges with minimal noise, resulting in a clearer output.', 'The Probabilistic Hough Lines Transform is an optimization of the normal Hough Transform, reducing computation and improving accuracy by considering only a random subset of points for line detection.', 'The Hough transform algorithm involves four important steps: edge detection, mapping of edge points to the half space, interpretation of accumulator to yield lines of infinite length, and conversion of infinite lines to finite lines.', 'Defining a region of interest for the vehicle to mask obstructions and distortions in the image, focusing on a specific triangle area to enhance vehicle perception.', 'The chapter demonstrates the process of drawing lane lines on images and video frames using OpenCV, illustrating the method for drawing lines on blank images, merging them with original images, and applying the same concept to video frames, and concludes with the demonstration of drawing and modifying lane lines on video frames.', 'The video showcases real-time face detection using HAR based cascade classifiers.', 'Background subtraction is a widely used technique for generating a foreground mask from images captured using a static camera, and it can be applied in scenarios like visitor counting and traffic monitoring.', 'OpenCV has implemented several algorithms for background subtraction, which will be demonstrated one by one in the chapter.', 'The Harris Corner Detection method involves maximizing a function using a Taylor expansion, resulting in the calculation of the score for R based on the eigenvalues of m.', 'Shi Tomasi Corner Detector gives better results than Harris Corner Detector and allows control over the number of corners detected, with important corners being detected in a better way.']}