{"id":2328,"date":"2024-05-19T00:15:17","date_gmt":"2024-05-18T18:45:17","guid":{"rendered":"https:\/\/moodle.sit.ac.in\/blog\/?p=2328"},"modified":"2024-05-19T01:15:35","modified_gmt":"2024-05-18T19:45:35","slug":"computer-graphics-and-image-processing-laboratory-21csl66","status":"publish","type":"post","link":"https:\/\/moodle.sit.ac.in\/blog\/computer-graphics-and-image-processing-laboratory-21csl66\/","title":{"rendered":"COMPUTER GRAPHICS AND IMAGE PROCESSING LABORATORY &#8211; 21CSL66"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-1.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"199\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-1.png?resize=1024%2C199&#038;ssl=1\" alt=\"\" class=\"wp-image-2441 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-1.png?resize=1024%2C199&amp;ssl=1 1024w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-1.png?resize=300%2C58&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-1.png?resize=768%2C149&amp;ssl=1 768w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-1.png?w=1095&amp;ssl=1 1095w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/199;\" \/><\/a><\/figure>\n\n\n\n<p>In this blog post, you will find solutions for the <strong>COMPUTER GRAPHICS AND IMAGE PROCESSING LABORATORY (21CSL66)<\/strong> course work for the VI semester of <strong>VTU<\/strong> university. To follow along, you will need to have up a machine running any flavour of <strong>GNULinux<\/strong> OS. We recommend using the <strong>GCC compiler<\/strong> for this lab. The solutions have been tested on <strong>Ubuntu 22.04 <\/strong>OS. You can find the lab syllabus on the university&#8217;s website or here below.<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/21CSL66.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Embed of 21CSL66.\"><\/object><a id=\"wp-block-file--media-a83e6d0c-d429-4cb7-b451-ca18368d4d9a\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/21CSL66.pdf\">21CSL66<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/21CSL66.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-a83e6d0c-d429-4cb7-b451-ca18368d4d9a\">Download<\/a><\/div>\n\n\n\n<p>All these solutions have been maintained at the following git repository shown below. If you want to contribute send me a PR.<\/p>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/lab_manuals\/current\/vi-semester\/21csl66_computer_graphics_and_image_processing_laboratory\">https:\/\/gitlab.com\/lab_manuals\/current\/vi-semester\/21csl66_computer_graphics_and_image_processing_laboratory<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing OpenGL and OpenCV<\/h2>\n\n\n\n<p>This lab requires you to use two libraries <a href=\"https:\/\/www.opengl.org\/\" target=\"_blank\" rel=\"noopener\" title=\"OpenGL\">OpenGL<\/a> and <a href=\"https:\/\/opencv.org\/\" target=\"_blank\" rel=\"noopener\" title=\"OpenCV\">OpenCV<\/a> . We will be using C++ for OpenGL and Python for OpenCV. Lets see how to setup the requisite software .<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenGL Installation<\/h3>\n\n\n\n<p>On Ubuntu 22.04, <strong>GCC<\/strong> is installed by default all we have to do is install the <strong>OpenGL<\/strong> library <a href=\"https:\/\/freeglut.sourceforge.net\/\" target=\"_blank\" rel=\"noopener\" title=\"freeglut\"><strong>freeglut<\/strong><\/a>. freeglut is a free-software\/open-source alternative to the OpenGL Utility Toolkit (<strong>GLUT<\/strong>) library.&nbsp;You can install freeglut using the following command.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"sudo apt install freeglut3\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">sudo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">apt<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">install<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">freeglut3<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now the requisite libraries will be installed, which can be verified as follows.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ ls -d \/usr\/include\/GL\n\/usr\/include\/GL\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">ls<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-d<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">\/usr\/include\/GL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">\/usr\/include\/GL<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>After getting the necessary development environment setup, Now lets focus on the solutions.<\/p>\n\n\n\n<p><strong>Compilation<\/strong><\/p>\n\n\n\n<p>To compile use the <strong>g++<\/strong> compiler for <strong>C++ <\/strong>code or <strong>gcc<\/strong> if you are coding in <strong>C <\/strong>language as follows. While compiling one has to link to <strong>GL<\/strong>, <strong>GLU<\/strong> and <strong>glut<\/strong>. Optionally you can redirect the output to the file of your choice as shown below.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ g++ filename.cpp -lGL -lGLU -lglut -o outputname\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">g++<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">filename.cpp<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGL<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGLU<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lglut<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-o<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">outputname<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\"><strong>OpenCV Installation<\/strong><\/h3>\n\n\n\n<p>As said earlier we would require the Python environment for using OpenCV library. It is recommended to setup the Python environment using the Anconda installer. A detailed procedure can be found here in this following blog.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-myblogosphere wp-block-embed-myblogosphere\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"SritL6K9Dn\"><a href=\"https:\/\/moodle.sit.ac.in\/blog\/setting-up-anaconda-python-programming-environment\/\">Setting up Anaconda Python Programming Environment on Ubuntu<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Setting up Anaconda Python Programming Environment on Ubuntu&#8221; &#8212; MyBlogosphere\" data-src=\"https:\/\/moodle.sit.ac.in\/blog\/setting-up-anaconda-python-programming-environment\/embed\/#?secret=XL4QXVdYsg#?secret=SritL6K9Dn\" data-secret=\"SritL6K9Dn\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>After setting up the <strong>Anaconda<\/strong> environment we can now install <strong>OpenCV<\/strong> using the <strong>conda <\/strong>installer.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ conda install opencv\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">conda<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">install<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">opencv<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>To verify the installation do the following. <\/p>\n\n\n\n<p>The OpenCV version is contained within a special&nbsp;<strong>cv2.__version__<\/strong>&nbsp;variable, which you can access like this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python\n&gt;&gt;&gt; import cv2\n&gt;&gt;&gt; cv2.__version__\n'4.6.0'\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">&gt;&gt;&gt; <\/span><span style=\"color: #B392F0\">import<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cv2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">&gt;&gt;&gt; <\/span><span style=\"color: #B392F0\">cv2.__version__<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">&#39;4.6.0&#39;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>After getting the necessary development environment setup, Now lets focus on the solutions. You can go to the appropriate program by clicking on the links below.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"color: #ff0000;\"><a href=\"#P01\" title=\"Question 1\">Bresenham\u2019s line drawing technique<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><strong><a href=\"#P02\" title=\"Basic geometric operations on the 2D object\">Basic geometric operations on the 2D object<\/a><\/strong><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P03\" title=\"Basic geometric operations on the 3D object\">Basic geometric operations on the 3D object<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\">2D transformations<\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\">3D transformations<\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P06\" title=\"Animation effects\">Animation effects<\/a><\/span><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"color: #ff0000;\"><a href=\"#P07\" title=\"Split and Display Image\">Split and Display Image<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P08\" title=\"Rotation, Scaling and Translation on an image\">Rotation, Scaling and Translation on an image<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P09\" title=\"Feature Extraction\">Feature Extraction<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P10\" title=\"Blur and Smoothing\">Blur and Smoothing<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P11\" title=\"Contour detection\">Contour detection<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P12\" title=\"Face Detection\">Face Detection<\/a><\/span><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2023\/10\/CodingAd.png?ssl=1\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><strong>Open<\/strong>GL<\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading\" id=\"P01\">Question 1 <\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Bresenham\u2019s line drawing technique<\/h2>\n\n\n\n<p><strong>Develop a program to draw a line using Bresenham\u2019s line drawing technique<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C++ Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#include &lt;GL\/glut.h&gt;\n#include &lt;iostream&gt;\nusing namespace std;\n\n\/\/ Bresenham's line drawing algorithm\nvoid drawLine(int x0, int y0, int x1, int y1) {\n    int dx = abs(x1 - x0);\n    int dy = abs(y1 - y0);\n    int sx = (x0 &lt; x1) ? 1 : -1;\n    int sy = (y0 &lt; y1) ? 1 : -1;\n    int err = dx - dy;\n\n    while (true) {\n        glBegin(GL_POINTS);\n        glVertex2i(x0, y0);\n        glEnd();\n\n        if (x0 == x1 &amp;&amp; y0 == y1) break;\n\n        int e2 = 2 * err;\n        if (e2 &gt; -dy) {\n            err -= dy;\n            x0 += sx;\n        }\n        if (e2 &lt; dx) {\n            err += dx;\n            y0 += sy;\n        }\n    }\n}\n\n\/\/ OpenGL display callback\nvoid display() {\n    int x1, x2, y1, y2;\n\n    cout &lt;&lt; &quot;Enter coordinates for x1 and y1&quot; &lt;&lt; endl;\n    cin &gt;&gt; x1 &gt;&gt; y1;\n    cout &lt;&lt; &quot;Enter coordinates for x2 and y2&quot; &lt;&lt; endl;\n    cin &gt;&gt; x2 &gt;&gt; y2;\n\n    glClear(GL_COLOR_BUFFER_BIT);\n\n    \/\/ Draw line using Bresenham's algorithm\n    glColor3f(1.0f, 1.0f, 1.0f);\n    drawLine(x1, y1, x2, y2);\n\n    glFlush();\n}\n\n\/\/ OpenGL initialization\nvoid initializeOpenGL(int argc, char** argv) {\n    glutInit(&amp;argc, argv);\n    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);\n    glutInitWindowSize(800, 600);\n    glutCreateWindow(&quot;Bresenham's Line Algorithm&quot;);\n\n    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);\n    glMatrixMode(GL_PROJECTION);\n    glLoadIdentity();\n    gluOrtho2D(0, 800, 0, 600);\n\n    glutDisplayFunc(display);\n}\n\n\/\/ Main function\nint main(int argc, char** argv) {\n\n    initializeOpenGL(argc, argv);\n\n    glutMainLoop();\n\n    return 0;\n}\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">GL\/glut.h<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">iostream<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">using<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">namespace<\/span><span style=\"color: #F8F8F2\"> std;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Bresenham&#39;s line drawing algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">drawLine<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">x0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">y0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">x1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">y1<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> dx <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">abs<\/span><span style=\"color: #F8F8F2\">(x1 <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> x0);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> dy <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">abs<\/span><span style=\"color: #F8F8F2\">(y1 <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> y0);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> sx <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (x0 <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> x1) <\/span><span style=\"color: #FF79C6\">?<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> sy <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (y0 <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> y1) <\/span><span style=\"color: #FF79C6\">?<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> err <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> dx <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> dy;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">while<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">glBegin<\/span><span style=\"color: #F8F8F2\">(GL_POINTS);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">glVertex2i<\/span><span style=\"color: #F8F8F2\">(x0, y0);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">glEnd<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (x0 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> x1 <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y0 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> y1) <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> e2 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">*<\/span><span style=\"color: #F8F8F2\"> err;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (e2 <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\">dy) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            err <\/span><span style=\"color: #FF79C6\">-=<\/span><span style=\"color: #F8F8F2\"> dy;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            x0 <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> sx;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (e2 <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> dx) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            err <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> dx;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            y0 <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> sy;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ OpenGL display callback<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">display<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> x1, x2, y1, y2;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cout <\/span><span style=\"color: #FF79C6\">&lt;&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Enter coordinates for x1 and y1<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&lt;&lt;<\/span><span style=\"color: #F8F8F2\"> endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cin <\/span><span style=\"color: #FF79C6\">&gt;&gt;<\/span><span style=\"color: #F8F8F2\"> x1 <\/span><span style=\"color: #FF79C6\">&gt;&gt;<\/span><span style=\"color: #F8F8F2\"> y1;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cout <\/span><span style=\"color: #FF79C6\">&lt;&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Enter coordinates for x2 and y2<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&lt;&lt;<\/span><span style=\"color: #F8F8F2\"> endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cin <\/span><span style=\"color: #FF79C6\">&gt;&gt;<\/span><span style=\"color: #F8F8F2\"> x2 <\/span><span style=\"color: #FF79C6\">&gt;&gt;<\/span><span style=\"color: #F8F8F2\"> y2;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glClear<\/span><span style=\"color: #F8F8F2\">(GL_COLOR_BUFFER_BIT);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Draw line using Bresenham&#39;s algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">drawLine<\/span><span style=\"color: #F8F8F2\">(x1, y1, x2, y2);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glFlush<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ OpenGL initialization<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initializeOpenGL<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">argc, argv);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInitDisplayMode<\/span><span style=\"color: #F8F8F2\">(GLUT_SINGLE <\/span><span style=\"color: #FF79C6\">|<\/span><span style=\"color: #F8F8F2\"> GLUT_RGB);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInitWindowSize<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">800<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">600<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutCreateWindow<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Bresenham&#39;s Line Algorithm<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glClearColor<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_PROJECTION);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">gluOrtho2D<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">800<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">600<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutDisplayFunc<\/span><span style=\"color: #F8F8F2\">(display);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Main function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">main<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">initializeOpenGL<\/span><span style=\"color: #F8F8F2\">(argc, argv);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutMainLoop<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<p>We include for GLUT functions and OpenGL headers.<br>The drawLine function implements Bresenham&#8217;s line drawing algorithm, just like in the previous example.<br>The display function is the GLUT display callback, where we clear the screen and draw the line using drawLine.<br>The initializeOpenGL function sets up the GLUT window and OpenGL context. It specifies the display mode, window size, and title. It also sets up the projection matrix and registers the display callback.<br>In main, we initialize the OpenGL context using initializeOpenGL and start the GLUT main loop with glutMainLoop().<br>Compile this program with a C++ compiler that links against GLUT and OpenGL libraries. When you run the compiled program, it should open an OpenGL window displaying a white line drawn using Bresenham&#8217;s algorithm from (50, 50) to (500, 500) given as input from the user. Adjust the window size and line coordinates as needed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ g++ 01_Bresenham.cpp -lGL -lGLU -lglut -o 01_Bresenham.x\n\n$ .\/01_Bresenham.x \nEnter coordinates for x1 and y1\n50 50\nEnter coordinates for x1 and y1\n500 500\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">$ g<\/span><span style=\"color: #F97583\">++<\/span><span style=\"color: #E1E4E8\"> 01_Bresenham.cpp <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\">lGL <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\">lGLU <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\">lglut <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\">o 01_Bresenham.x<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">$ .<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #E1E4E8\">01_Bresenham.x <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter coordinates for x1 and y1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">50<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">50<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter coordinates for x1 and y1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">500<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">500<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P01.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"820\" height=\"650\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P01.png?resize=820%2C650&#038;ssl=1\" alt=\"\" class=\"wp-image-2340 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P01.png?w=820&amp;ssl=1 820w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P01.png?resize=300%2C238&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P01.png?resize=768%2C609&amp;ssl=1 768w\" data-sizes=\"(max-width: 820px) 100vw, 820px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 820px; --smush-placeholder-aspect-ratio: 820\/650;\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P02\">Question 2 <\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>Basic geometric operations on the 2D object<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\"><strong>Develop a program to demonstrate basic geometric operations on the 2D object<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">C++ Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#include &lt;GL\/glut.h&gt;\n#include &lt;iostream&gt;\n\n\/\/ Global variables\nint width = 800;\nint height = 600;\nfloat rectWidth = 100.0f;\nfloat rectHeight = 50.0f;\nfloat rectPositionX = (width - rectWidth) \/ 2.0f;\nfloat rectPositionY = (height - rectHeight) \/ 2.0f;\nfloat rotationAngle = 0.0f;\nfloat scaleFactor = 1.0f;\n\n\/\/ Function to draw a rectangle\nvoid drawRectangle(float x, float y, float width, float height) {\n    glBegin(GL_POLYGON);\n    glVertex2f(x, y);\n    glVertex2f(x + width, y);\n    glVertex2f(x + width, y + height);\n    glVertex2f(x, y + height);\n    glEnd();\n}\n\n\/\/ Function to handle display\nvoid display() {\n    glClear(GL_COLOR_BUFFER_BIT);\n\n    glMatrixMode(GL_MODELVIEW);\n    glLoadIdentity();\n\n    \/\/ Apply transformations\n    glTranslatef(rectPositionX, rectPositionY, 0.0f);\n    glRotatef(rotationAngle, 0.0f, 0.0f, 1.0f);\n    glScalef(scaleFactor, scaleFactor, 1.0f);\n\n    \/\/ Draw rectangle\n    glColor3f(1.0f, 0.0f, 0.0f); \/\/ Red color\n    drawRectangle(0.0f, 0.0f, rectWidth, rectHeight);\n\n    glFlush();\n}\n\n\/\/ Function to handle keyboard events\nvoid keyboard(unsigned char key, int x, int y) {\n    switch (key) {\n        case 't':\n            \/\/ Translate the rectangle by 10 units in the x-direction\n            rectPositionX += 10.0f;\n            break;\n        case 'r':\n            \/\/ Rotate the rectangle by 10 degrees clockwise\n            rotationAngle += 10.0f;\n            break;\n        case 's':\n            \/\/ Scale the rectangle by 10% (scaleFactor = 1.1f)\n            scaleFactor *= 1.1f;\n            break;\n        case 'u':\n            \/\/ Reset transformations (translate back to center, reset rotation and scaling)\n            rectPositionX = (width - rectWidth) \/ 2.0f;\n            rectPositionY = (height - rectHeight) \/ 2.0f;\n            rotationAngle = 0.0f;\n            scaleFactor = 1.0f;\n            break;\n        case 27: \/\/ Escape key to exit\n            exit(0);\n            break;\n    }\n\n    glutPostRedisplay(); \/\/ Trigger a redraw\n}\n\n\/\/ Function to initialize OpenGL\nvoid initializeOpenGL(int argc, char** argv) {\n    glutInit(&amp;argc, argv);\n    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);\n    glutInitWindowSize(width, height);\n    glutCreateWindow(&quot;Geometric Operations in 2D&quot;);\n\n    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); \/\/ White background\n    glMatrixMode(GL_PROJECTION);\n    glLoadIdentity();\n    gluOrtho2D(0, width, 0, height);\n\n    glutDisplayFunc(display);\n    glutKeyboardFunc(keyboard);\n}\n\n\/\/ Main function\nint main(int argc, char** argv) {\n    initializeOpenGL(argc, argv);\n    glutMainLoop();\n    return 0;\n}\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">GL\/glut.h<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">iostream<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Global variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> width <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">800<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> height <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">600<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> rectWidth <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">100.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> rectHeight <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">50.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> rectPositionX <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (width <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> rectWidth) <\/span><span style=\"color: #FF79C6\">\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> rectPositionY <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (height <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> rectHeight) <\/span><span style=\"color: #FF79C6\">\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> rotationAngle <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> scaleFactor <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to draw a rectangle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">drawRectangle<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">x<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">y<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">width<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">height<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glBegin<\/span><span style=\"color: #F8F8F2\">(GL_POLYGON);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex2f<\/span><span style=\"color: #F8F8F2\">(x, y);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex2f<\/span><span style=\"color: #F8F8F2\">(x <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> width, y);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex2f<\/span><span style=\"color: #F8F8F2\">(x <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> width, y <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> height);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex2f<\/span><span style=\"color: #F8F8F2\">(x, y <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> height);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glEnd<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to handle display<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">display<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glClear<\/span><span style=\"color: #F8F8F2\">(GL_COLOR_BUFFER_BIT);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_MODELVIEW);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Apply transformations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glTranslatef<\/span><span style=\"color: #F8F8F2\">(rectPositionX, rectPositionY, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glRotatef<\/span><span style=\"color: #F8F8F2\">(rotationAngle, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glScalef<\/span><span style=\"color: #F8F8F2\">(scaleFactor, scaleFactor, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Draw rectangle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Red color<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">drawRectangle<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, rectWidth, rectHeight);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glFlush<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to handle keyboard events<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">keyboard<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">unsigned<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">char<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">key<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">x<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">y<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">switch<\/span><span style=\"color: #F8F8F2\"> (key) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">t<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">            \/\/ Translate the rectangle by 10 units in the x-direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rectPositionX <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">10.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">r<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">            \/\/ Rotate the rectangle by 10 degrees clockwise<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rotationAngle <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">10.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">s<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">            \/\/ Scale the rectangle by 10% (scaleFactor = 1.1f)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            scaleFactor <\/span><span style=\"color: #FF79C6\">*=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1.1<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">u<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">            \/\/ Reset transformations (translate back to center, reset rotation and scaling)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rectPositionX <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (width <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> rectWidth) <\/span><span style=\"color: #FF79C6\">\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rectPositionY <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (height <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> rectHeight) <\/span><span style=\"color: #FF79C6\">\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rotationAngle <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            scaleFactor <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">27<\/span><span style=\"color: #F8F8F2\">:<\/span><span style=\"color: #6272A4\"> \/\/ Escape key to exit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">exit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutPostRedisplay<\/span><span style=\"color: #F8F8F2\">();<\/span><span style=\"color: #6272A4\"> \/\/ Trigger a redraw<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to initialize OpenGL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initializeOpenGL<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">argc, argv);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInitDisplayMode<\/span><span style=\"color: #F8F8F2\">(GLUT_SINGLE <\/span><span style=\"color: #FF79C6\">|<\/span><span style=\"color: #F8F8F2\"> GLUT_RGB);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInitWindowSize<\/span><span style=\"color: #F8F8F2\">(width, height);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutCreateWindow<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Geometric Operations in 2D<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glClearColor<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ White background<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_PROJECTION);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">gluOrtho2D<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, width, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, height);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutDisplayFunc<\/span><span style=\"color: #F8F8F2\">(display);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutKeyboardFunc<\/span><span style=\"color: #F8F8F2\">(keyboard);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Main function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">main<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">initializeOpenGL<\/span><span style=\"color: #F8F8F2\">(argc, argv);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutMainLoop<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>glMatrixMode(GL_PROJECTION)<\/code> and <code>glLoadIdentity()<\/code> in the <code>initializeOpenGL<\/code> function ensure that the projection matrix is properly set up.<\/li>\n\n\n\n<li>We define a simple <code>drawRectangle<\/code> function that draws a rectangle using OpenGL primitives.<\/li>\n\n\n\n<li>The <code>display<\/code> function is responsible for rendering the scene. It applies translation (<code>glTranslatef<\/code>), rotation (<code>glRotatef<\/code>), and scaling (<code>glScalef<\/code>) transformations to the rectangle before drawing it.<\/li>\n\n\n\n<li>The <code>glTranslatef<\/code>, <code>glRotatef<\/code>, and <code>glScalef<\/code> calls in the <code>display<\/code> function are applied correctly within the <code>GL_MODELVIEW<\/code> matrix mode.<\/li>\n\n\n\n<li>The <code>glColor3f(1.0f, 0.0f, 0.0f)<\/code> call sets the drawing color to red (RGB values: 1.0, 0.0, 0.0).<\/li>\n\n\n\n<li>Keyboard input is handled by the <code>keyboard<\/code> function. Pressing keys &#8216;t&#8217;, &#8216;r&#8217;, &#8216;s&#8217;, and &#8216;u&#8217; triggers translation, rotation, scaling, and reset operations, respectively.<\/li>\n\n\n\n<li>The <code>initializeOpenGL<\/code> function sets up the GLUT window and initializes OpenGL settings.<\/li>\n\n\n\n<li>In <code>main<\/code>, we initialize the OpenGL context using <code>initializeOpenGL<\/code> and start the GLUT main loop.<\/li>\n<\/ul>\n\n\n\n<p>To compile and run this program, make sure you have GLUT installed and set up in your development environment. Compile the program using a C++ compiler that links against GLUT and OpenGL libraries (e.g., using <code>-lglut -lGL -lGLU<\/code> flags). When you run the compiled program, a window will appear displaying a red rectangle. Use the keyboard keys (&#8216;t&#8217;, &#8216;r&#8217;, &#8216;s&#8217;, &#8216;u&#8217;) to perform translation, rotation, scaling, and reset operations on the rectangle interactively.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ g++ 02_Geometric_2D.cpp -lGL -lGLU -lglut -o 02_Geometric_2D.x\n\n$ .\/02_Geometric_2D.x \n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">g++<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">02<\/span><span style=\"color: #9ECBFF\">_Geometric_2D.cpp<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGL<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGLU<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lglut<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-o<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">02<\/span><span style=\"color: #9ECBFF\">_Geometric_2D.x<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">.\/02_Geometric_2D.x<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"768\" style=\"aspect-ratio: 1366 \/ 768;\" width=\"1366\" controls src=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/p02.mkv\"><\/video><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P03\">Question 3 <\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>Basic geometric operations on the 3D object<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\"><strong>Develop a program to demonstrate basic geometric operations on the 3D object<\/strong><\/p>\n\n\n\n<p>To demonstrate basic geometric operations on a 3D object using GLUT (OpenGL Utility Toolkit), we can create a program that allows you to perform translation, rotation, and scaling operations interactively on a simple 3D object (e.g., a cube). Below is an example program written in C++ using GLUT that demonstrates these geometric transformations on a 3D cube.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">C++ Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#include &lt;GL\/glut.h&gt;\n#include &lt;iostream&gt;\n\n\/\/ Global variables\nint width = 800;\nint height = 600;\nGLfloat rotationX = 0.0f;\nGLfloat rotationY = 0.0f;\nGLfloat scale = 1.0f;\n\n\/\/ Function to draw a cube\nvoid drawCube() {\n    glBegin(GL_QUADS);\n\n    \/\/ Front face\n    glColor3f(1.0f, 0.0f, 0.0f); \/\/ Red\n    glVertex3f(-0.5f, -0.5f, 0.5f);\n    glVertex3f(0.5f, -0.5f, 0.5f);\n    glVertex3f(0.5f, 0.5f, 0.5f);\n    glVertex3f(-0.5f, 0.5f, 0.5f);\n\n    \/\/ Back face\n    glColor3f(0.0f, 1.0f, 0.0f); \/\/ Green\n    glVertex3f(-0.5f, -0.5f, -0.5f);\n    glVertex3f(-0.5f, 0.5f, -0.5f);\n    glVertex3f(0.5f, 0.5f, -0.5f);\n    glVertex3f(0.5f, -0.5f, -0.5f);\n\n    \/\/ Top face\n    glColor3f(0.0f, 0.0f, 1.0f); \/\/ Blue\n    glVertex3f(-0.5f, 0.5f, -0.5f);\n    glVertex3f(-0.5f, 0.5f, 0.5f);\n    glVertex3f(0.5f, 0.5f, 0.5f);\n    glVertex3f(0.5f, 0.5f, -0.5f);\n\n    \/\/ Bottom face\n    glColor3f(1.0f, 1.0f, 0.0f); \/\/ Yellow\n    glVertex3f(-0.5f, -0.5f, -0.5f);\n    glVertex3f(0.5f, -0.5f, -0.5f);\n    glVertex3f(0.5f, -0.5f, 0.5f);\n    glVertex3f(-0.5f, -0.5f, 0.5f);\n\n    \/\/ Right face\n    glColor3f(1.0f, 0.0f, 1.0f); \/\/ Magenta\n    glVertex3f(0.5f, -0.5f, -0.5f);\n    glVertex3f(0.5f, 0.5f, -0.5f);\n    glVertex3f(0.5f, 0.5f, 0.5f);\n    glVertex3f(0.5f, -0.5f, 0.5f);\n\n    \/\/ Left face\n    glColor3f(0.0f, 1.0f, 1.0f); \/\/ Cyan\n    glVertex3f(-0.5f, -0.5f, -0.5f);\n    glVertex3f(-0.5f, -0.5f, 0.5f);\n    glVertex3f(-0.5f, 0.5f, 0.5f);\n    glVertex3f(-0.5f, 0.5f, -0.5f);\n\n    glEnd();\n}\n\n\/\/ Function to handle display\nvoid display() {\n    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\n    glMatrixMode(GL_MODELVIEW);\n    glLoadIdentity();\n\n    \/\/ Apply transformations\n    glTranslatef(0.0f, 0.0f, -3.0f);\n    glRotatef(rotationX, 1.0f, 0.0f, 0.0f);\n    glRotatef(rotationY, 0.0f, 1.0f, 0.0f);\n    glScalef(scale, scale, scale);\n\n    \/\/ Draw cube\n    drawCube();\n\n    glutSwapBuffers();\n}\n\n\/\/ Function to handle keyboard events\nvoid keyboard(unsigned char key, int x, int y) {\n    switch (key) {\n        case 'x':\n            rotationX += 5.0f;\n            break;\n        case 'X':\n            rotationX -= 5.0f;\n            break;\n        case 'y':\n            rotationY += 5.0f;\n            break;\n        case 'Y':\n            rotationY -= 5.0f;\n            break;\n        case '+':\n            scale += 0.1f;\n            break;\n        case '-':\n            if (scale &gt; 0.1f)\n                scale -= 0.1f;\n            break;\n        case 27: \/\/ Escape key to exit\n            exit(0);\n            break;\n    }\n\n    glutPostRedisplay(); \/\/ Trigger a redraw\n}\n\n\/\/ Function to initialize OpenGL\nvoid initializeOpenGL(int argc, char** argv) {\n    glutInit(&amp;argc, argv);\n    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);\n    glutInitWindowSize(width, height);\n    glutCreateWindow(&quot;Geometric Operations in 3D&quot;);\n\n    glEnable(GL_DEPTH_TEST);\n    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); \/\/ White background\n\n    glMatrixMode(GL_PROJECTION);\n    glLoadIdentity();\n    gluPerspective(45.0f, (float)width \/ (float)height, 1.0f, 100.0f);\n\n    glutDisplayFunc(display);\n    glutKeyboardFunc(keyboard);\n}\n\n\/\/ Main function\nint main(int argc, char** argv) {\n    initializeOpenGL(argc, argv);\n    glutMainLoop();\n    return 0;\n}\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">GL\/glut.h<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">iostream<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Global variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> width <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">800<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> height <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">600<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">GLfloat rotationX <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">GLfloat rotationY <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">GLfloat scale <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to draw a cube<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">drawCube<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glBegin<\/span><span style=\"color: #F8F8F2\">(GL_QUADS);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Front face<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Red<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Back face<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Green<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Top face<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Blue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Bottom face<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Yellow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Right face<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Magenta<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Left face<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ Cyan<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glVertex3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glEnd<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to handle display<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">display<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glClear<\/span><span style=\"color: #F8F8F2\">(GL_COLOR_BUFFER_BIT <\/span><span style=\"color: #FF79C6\">|<\/span><span style=\"color: #F8F8F2\"> GL_DEPTH_BUFFER_BIT);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_MODELVIEW);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Apply transformations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glTranslatef<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">3.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glRotatef<\/span><span style=\"color: #F8F8F2\">(rotationX, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glRotatef<\/span><span style=\"color: #F8F8F2\">(rotationY, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glScalef<\/span><span style=\"color: #F8F8F2\">(scale, scale, scale);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">    \/\/ Draw cube<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">drawCube<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutSwapBuffers<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to handle keyboard events<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">keyboard<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">unsigned<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">char<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">key<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">x<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">y<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">switch<\/span><span style=\"color: #F8F8F2\"> (key) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">x<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rotationX <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">5.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">X<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rotationX <\/span><span style=\"color: #FF79C6\">-=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">5.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">y<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rotationY <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">5.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Y<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            rotationY <\/span><span style=\"color: #FF79C6\">-=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">5.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">+<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            scale <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.1<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">-<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (scale <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.1<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                scale <\/span><span style=\"color: #FF79C6\">-=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.1<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">27<\/span><span style=\"color: #F8F8F2\">:<\/span><span style=\"color: #6272A4\"> \/\/ Escape key to exit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">exit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutPostRedisplay<\/span><span style=\"color: #F8F8F2\">();<\/span><span style=\"color: #6272A4\"> \/\/ Trigger a redraw<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Function to initialize OpenGL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initializeOpenGL<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">argc, argv);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInitDisplayMode<\/span><span style=\"color: #F8F8F2\">(GLUT_DOUBLE <\/span><span style=\"color: #FF79C6\">|<\/span><span style=\"color: #F8F8F2\"> GLUT_RGB <\/span><span style=\"color: #FF79C6\">|<\/span><span style=\"color: #F8F8F2\"> GLUT_DEPTH);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutInitWindowSize<\/span><span style=\"color: #F8F8F2\">(width, height);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutCreateWindow<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Geometric Operations in 3D<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glEnable<\/span><span style=\"color: #F8F8F2\">(GL_DEPTH_TEST);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glClearColor<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><span style=\"color: #6272A4\"> \/\/ White background<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_PROJECTION);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">gluPerspective<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">45.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, (<\/span><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\">)width <\/span><span style=\"color: #FF79C6\">\/<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #FF79C6\">float<\/span><span style=\"color: #F8F8F2\">)height, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">100.0<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutDisplayFunc<\/span><span style=\"color: #F8F8F2\">(display);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutKeyboardFunc<\/span><span style=\"color: #F8F8F2\">(keyboard);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Main function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">main<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">initializeOpenGL<\/span><span style=\"color: #F8F8F2\">(argc, argv);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">glutMainLoop<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We define a <code>drawCube<\/code> function that draws a simple cube using <code>GL_QUADS<\/code> for each face.<\/li>\n\n\n\n<li>The <code>display<\/code> function sets up the model-view matrix and applies translation (<code>glTranslatef<\/code>), rotation (<code>glRotatef<\/code>), and scaling (<code>glScalef<\/code>) transformations to the cube before drawing it.<\/li>\n\n\n\n<li>Keyboard input is handled by the <code>keyboard<\/code> function. Pressing keys &#8216;x&#8217;, &#8216;X&#8217;, &#8216;y&#8217;, and &#8216;Y&#8217; rotates the cube around the X and Y axes, while &#8216;+&#8217; and &#8216;-&#8216; keys scale the cube up and down, respectively.<\/li>\n\n\n\n<li>The <code>initializeOpenGL<\/code> function sets up the GLUT window, initializes OpenGL settings (including depth testing for 3D rendering), and registers display and keyboard callback functions.<\/li>\n\n\n\n<li>The <code>main<\/code> function initializes the OpenGL context using <code>initializeOpenGL<\/code> and starts the GLUT main loop.<\/li>\n<\/ul>\n\n\n\n<p>Compile and run this program, and you should see a window displaying a rotating and scalable cube. Use the keyboard keys (&#8216;x&#8217;, &#8216;X&#8217;, &#8216;y&#8217;, &#8216;Y&#8217;, &#8216;+&#8217;, &#8216;-&#8216;) to perform rotation and scaling operations on the cube interactively. The modifications made in this version should ensure that the cube is visible and that the geometric transformations work as expected in a 3D context.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ g++ 03_Geometric_3D.cpp -lglut -lGLU -lGL -o 03_Geometric_3D.x\n\n$ .\/03_Geometric_3D.x \" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">g++<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">03<\/span><span style=\"color: #9ECBFF\">_Geometric_3D.cpp<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lglut<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGLU<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGL<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-o<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">03<\/span><span style=\"color: #9ECBFF\">_Geometric_3D.x<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">.\/03_Geometric_3D.x<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"768\" style=\"aspect-ratio: 1366 \/ 768;\" width=\"1366\" controls src=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P03.mkv\"><\/video><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P04\">Question 4<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>2D transformation<\/strong>s<\/h2>\n\n\n\n<p><strong>Develop a program to demonstrate 2D transformation on basic objects<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">C++ Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P05\">Question 5 <\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>3D transformation<\/strong>s<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\"><strong>Develop a program to demonstrate 3D transformation on 3D objects<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">C++ Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P06\">Question 6<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>Animation effects <\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\"><strong>Develop a program to demonstrate Animation effects on simple objects.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">C++ Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#include &lt;GL\/glut.h&gt;\n#include &lt;math.h&gt;\n#include &lt;stdlib.h&gt;\n\nconst double TWO_PI = 6.2831853;\nGLsizei winWidth = 500, winHeight = 500;\nGLuint regHex;\nstatic GLfloat rotTheta = 0.0;\n\n\/\/ Initial display window size.\n\/\/ Define name for display list.\nclass scrPt {\n\tpublic:\n\tGLint x, y;\n};\n\nstatic void init(void)\n{\n\tscrPt hexVertex;\n\tGLdouble hexTheta;\n\tGLint k;\n\tglClearColor(1.0, 1.0, 1.0, 0.0);\n\t\/* Set up a display list for a red regular hexagon.\n\t* Vertices for the hexagon are six equally spaced\n\t* points around the circumference of a circle.\n\t*\/\n\tregHex = glGenLists(1);\n\tglNewList(regHex, GL_COMPILE);\n\tglColor3f(1.0, 0.0, 0.0);\n\tglBegin(GL_POLYGON);\n\tfor(k = 0; k &lt; 6; k++) {\n\t\thexTheta = TWO_PI * k \/ 6;\n\t\thexVertex.x = 150 + 100 * cos(hexTheta);\n\t\thexVertex.y = 150 + 100 * sin(hexTheta);\n\t\tglVertex2i(hexVertex.x, hexVertex.y);\n\t}\n\tglEnd( );\n\tglEndList( );\n}\n\nvoid displayHex(void)\n{\n\tglClear(GL_COLOR_BUFFER_BIT);\n\tglPushMatrix( );\n\tglRotatef(rotTheta, 0.0, 0.0, 1.0);\n\tglCallList(regHex);\n\tglPopMatrix( );\n\tglutSwapBuffers( );\n\tglFlush( );\n}\n\nvoid rotateHex(void)\n{\n\trotTheta += 3.0;\n\tif(rotTheta &gt; 360.0)\n\trotTheta -= 360.0;\n\tglutPostRedisplay( );\n}\nvoid winReshapeFcn(GLint newWidth, GLint newHeight)\n{\n\tglViewport(0, 0,(GLsizei) newWidth,(GLsizei) newHeight);\n\tglMatrixMode(GL_PROJECTION);\n\tglLoadIdentity( );\n\tgluOrtho2D(-320.0, 320.0, -320.0, 320.0);\n\tglMatrixMode(GL_MODELVIEW);\n\tglLoadIdentity( );\n\tglClear(GL_COLOR_BUFFER_BIT);\n}\nvoid mouseFcn(GLint button, GLint action, GLint x, GLint y)\n{\n\tswitch(button) {\n\t\tcase GLUT_MIDDLE_BUTTON:\n\t\t\t\/\/ Start the rotation.\n\t\t\tif(action == GLUT_DOWN)\n\t\t\t\tglutIdleFunc(rotateHex);\n\t\t\tbreak;\n\t\tcase GLUT_RIGHT_BUTTON:\n\t\t\t\/\/ Stop the rotation.\n\t\t\tif(action == GLUT_DOWN)\n\t\t\t\tglutIdleFunc(NULL);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n}\n\nint main(int argc, char** argv)\n{\n\tglutInit(&amp;argc, argv);\n\tglutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);\n\tglutInitWindowPosition(150, 150);\n\tglutInitWindowSize(winWidth, winHeight);\n\tglutCreateWindow(&quot;Animation Example&quot;);\n\tinit( );\n\tglutDisplayFunc(displayHex);\n\tglutReshapeFunc(winReshapeFcn);\n\tglutMouseFunc(mouseFcn);\n\tglutMainLoop( );\n\treturn 0;\n}\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">GL\/glut.h<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">math.h<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">#include<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&lt;<\/span><span style=\"color: #F1FA8C\">stdlib.h<\/span><span style=\"color: #E9F284\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">const<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">double<\/span><span style=\"color: #F8F8F2\"> TWO_PI <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6.2831853<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">GLsizei winWidth <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">500<\/span><span style=\"color: #F8F8F2\">, winHeight <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">500<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">GLuint regHex;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">static<\/span><span style=\"color: #F8F8F2\"> GLfloat rotTheta <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Initial display window size.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Define name for display list.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">scrPt<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #FF79C6\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\tGLint x, y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">static<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">init<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\tscrPt hexVertex;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\tGLdouble hexTheta;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\tGLint k;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glClearColor<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t\/* Set up a display list for a red regular hexagon.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t* Vertices for the hexagon are six equally spaced<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t* points around the circumference of a circle.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\tregHex <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">glGenLists<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glNewList<\/span><span style=\"color: #F8F8F2\">(regHex, GL_COMPILE);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glColor3f<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glBegin<\/span><span style=\"color: #F8F8F2\">(GL_POLYGON);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\">(k <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">; k <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">; k<\/span><span style=\"color: #FF79C6\">++<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\thexTheta <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> TWO_PI <\/span><span style=\"color: #FF79C6\">*<\/span><span style=\"color: #F8F8F2\"> k <\/span><span style=\"color: #FF79C6\">\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\thexVertex.x <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">150<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">100<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">*<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">cos<\/span><span style=\"color: #F8F8F2\">(hexTheta);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\thexVertex.y <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">150<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">100<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">*<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">sin<\/span><span style=\"color: #F8F8F2\">(hexTheta);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t<\/span><span style=\"color: #50FA7B\">glVertex2i<\/span><span style=\"color: #F8F8F2\">(hexVertex.x, hexVertex.y);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glEnd<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glEndList<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">displayHex<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glClear<\/span><span style=\"color: #F8F8F2\">(GL_COLOR_BUFFER_BIT);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glPushMatrix<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glRotatef<\/span><span style=\"color: #F8F8F2\">(rotTheta, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glCallList<\/span><span style=\"color: #F8F8F2\">(regHex);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glPopMatrix<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutSwapBuffers<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glFlush<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">rotateHex<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\trotTheta <\/span><span style=\"color: #FF79C6\">+=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3.0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\">(rotTheta <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">360.0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\trotTheta <\/span><span style=\"color: #FF79C6\">-=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">360.0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutPostRedisplay<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">winReshapeFcn<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">GLint<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">newWidth<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">GLint<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">newHeight<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glViewport<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,(GLsizei) newWidth,(GLsizei) newHeight);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_PROJECTION);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">gluOrtho2D<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">320.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">320.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">320.0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">320.0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glMatrixMode<\/span><span style=\"color: #F8F8F2\">(GL_MODELVIEW);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glLoadIdentity<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glClear<\/span><span style=\"color: #F8F8F2\">(GL_COLOR_BUFFER_BIT);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">mouseFcn<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">GLint<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">button<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">GLint<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">action<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">GLint<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">x<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">GLint<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">y<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #FF79C6\">switch<\/span><span style=\"color: #F8F8F2\">(button) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t<\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> GLUT_MIDDLE_BUTTON:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t\t\t\/\/ Start the rotation.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t<\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\">(action <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> GLUT_DOWN)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t\t<\/span><span style=\"color: #50FA7B\">glutIdleFunc<\/span><span style=\"color: #F8F8F2\">(rotateHex);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t<\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t<\/span><span style=\"color: #FF79C6\">case<\/span><span style=\"color: #F8F8F2\"> GLUT_RIGHT_BUTTON:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t\t\t\/\/ Stop the rotation.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t<\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\">(action <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> GLUT_DOWN)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t\t<\/span><span style=\"color: #50FA7B\">glutIdleFunc<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">NULL<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t<\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t<\/span><span style=\"color: #FF79C6\">default<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t\t<\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">main<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argc<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">char**<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">argv<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutInit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">argc, argv);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutInitDisplayMode<\/span><span style=\"color: #F8F8F2\">(GLUT_DOUBLE <\/span><span style=\"color: #FF79C6\">|<\/span><span style=\"color: #F8F8F2\"> GLUT_RGB);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutInitWindowPosition<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">150<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">150<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutInitWindowSize<\/span><span style=\"color: #F8F8F2\">(winWidth, winHeight);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutCreateWindow<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Animation Example<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">init<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutDisplayFunc<\/span><span style=\"color: #F8F8F2\">(displayHex);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutReshapeFunc<\/span><span style=\"color: #F8F8F2\">(winReshapeFcn);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutMouseFunc<\/span><span style=\"color: #F8F8F2\">(mouseFcn);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #50FA7B\">glutMainLoop<\/span><span style=\"color: #F8F8F2\">( );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The computer-animation features such as Double-buffering operations, if available, are activated using the following GLUT command:<br><strong>glutInitDisplayMode (GLUT_DOUBLE);<br><\/strong>This provides two buffers, called the front buffer and the back buffer, that we can use alternately to refresh the screen display. While one buffer is acting as the refresh buffer for the current display window, the next frame of an animation can be constructed in the other buffer. We specify when the roles of the two buffers are to be interchanged using<br><strong>glutSwapBuffers ( );<\/strong><\/p>\n\n\n\n<p>For a continuous animation, we can use<br><strong>glutIdleFunc (animationFcn);<br><\/strong>where parameter animationFcn can be assigned the name of a procedure that is to perform the operations for incrementing the animation parameters. This procedure is continuously executed whenever there are no display-window events that must be processed. The following program illustrates animation, which continuously rotates a regular hexagon in the xy plane about the z axis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ g++ 06_Animation.cpp -lGL -lGLU -lglut -o 06_Animation.x\n\n$ .\/06_Animation.x\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">g++<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">06<\/span><span style=\"color: #9ECBFF\">_Animation.cpp<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGL<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lGLU<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-lglut<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-o<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">06<\/span><span style=\"color: #9ECBFF\">_Animation.x<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">.\/06_Animation.x<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"768\" style=\"aspect-ratio: 1366 \/ 768;\" width=\"1366\" controls src=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/P06.mkv\"><\/video><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><strong>OpenCV<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P07\">Question 7<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>Split and Display Image<\/strong><\/h2>\n\n\n\n<p><strong>Write a Program to read a digital image. Split and display image into 4 quadrants, up, down, right and left.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import cv2\n\n# Function to split the image into four quadrants\ndef split_image(image):\n    height, width, _ = image.shape\n    half_height = height \/\/ 2\n    half_width = width \/\/ 2\n\n    # Split the image into four quadrants\n    top_left = image[:half_height, :half_width]\n    top_right = image[:half_height, half_width:]\n    bottom_left = image[half_height:, :half_width]\n    bottom_right = image[half_height:, half_width:]\n\n    return top_left, top_right, bottom_left, bottom_right\n\n# Function to display images\ndef display_images(images, window_names):\n    for img, name in zip(images, window_names):\n        cv2.imshow(name, img)\n\n    print(&quot;Press any key to terminate.&quot;)\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n\n# Read the image\nimage_path = &quot;image.jpg&quot;  # Replace &quot;image.jpg&quot; with the path to your image\nimage = cv2.imread(image_path)\n\nif image is None:\n    print(&quot;Failed to load the image.&quot;)\nelse:\n    # Split the image into quadrants\n    top_left, top_right, bottom_left, bottom_right = split_image(image)\n\n    # Display the quadrants\n    display_images([top_left, top_right, bottom_left, bottom_right], [&quot;Top Left&quot;, &quot;Top Right&quot;, &quot;Bottom Left&quot;, &quot;Bottom Right&quot;])\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> cv2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Function to split the image into four quadrants<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">split_image<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">image<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    height, width, _ <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> image.shape<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    half_height <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> height <\/span><span style=\"color: #FF79C6\">\/\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    half_width <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> width <\/span><span style=\"color: #FF79C6\">\/\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Split the image into four quadrants<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    top_left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> image[<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">half_height, <\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">half_width]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    top_right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> image[<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">half_height, half_width<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    bottom_left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> image[half_height<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">half_width]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    bottom_right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> image[half_height<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">, half_width<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\">]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> top_left, top_right, bottom_left, bottom_right<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Function to display images<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">display_images<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">images<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">window_names<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> img, name <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">zip<\/span><span style=\"color: #F8F8F2\">(images, window_names):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        cv2.imshow(name, img)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Press any key to terminate.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.waitKey(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.destroyAllWindows()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Read the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">image.jpg<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Replace &quot;image.jpg&quot; with the path to your image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.imread(image_path)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> image <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Failed to load the image.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Split the image into quadrants<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    top_left, top_right, bottom_left, bottom_right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> split_image(image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the quadrants<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    display_images([top_left, top_right, bottom_left, bottom_right], [<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Top Left<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Top Right<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Bottom Left<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Bottom Right<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">])<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>Defining Functions<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>split_image<\/strong>: This function takes an image as input and splits it into four quadrants: top left, top right, bottom left, and bottom right. It calculates the dimensions of the image and then slices the image array accordingly to extract each quadrant.<\/li>\n\n\n\n<li><strong>display_images<\/strong>: This function takes a list of images and a list of window names as input. It displays each image in a separate window with the corresponding window name.<\/li>\n<\/ul>\n\n\n\n<p><strong>Reading the Image:<\/strong><\/p>\n\n\n\n<p>We specify the path to the image file that we want to read. If the image is loaded successfully, it is stored in the variable <code>image<\/code>. If the image loading fails (e.g., due to an incorrect file path), an error message is printed.<\/p>\n\n\n\n<p><strong>Displaying the Quadrants<\/strong>:<\/p>\n\n\n\n<p>The program then calls the display_images function to display each quadrant in a separate window. It passes a list containing the four quadrants as the first argument and a list of window names as the second argument. Each window will display one quadrant of the original image.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>cv2.waitKey(0)<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>This function waits for a keyboard event indefinitely (<code>0<\/code> milliseconds).<\/li>\n\n\n\n<li>It allows the program to wait until a key is pressed by the user.<\/li>\n\n\n\n<li>In this program, it&#8217;s used to keep the windows open until a key is pressed, preventing them from closing immediately after being displayed.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>cv2.destroyAllWindows()<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>This function closes all the OpenCV windows.<\/li>\n\n\n\n<li>It&#8217;s used to clean up and close all the windows opened by OpenCV at the end of the program.<\/li>\n\n\n\n<li>In this program, it&#8217;s called after <code>cv2.waitKey(0)<\/code> to ensure that all windows are closed when the user presses a key to exit the program.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Together, <code>cv2.waitKey(0)<\/code> and <code>cv2.destroyAllWindows()<\/code> ensure that the program waits for user input to exit and then closes all windows properly when the program terminates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Input Image<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"685\" height=\"1024\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image.jpg?resize=685%2C1024&#038;ssl=1\" alt=\"\" class=\"wp-image-2363 lazyload\" style=\"--smush-placeholder-width: 685px; --smush-placeholder-aspect-ratio: 685\/1024;width:434px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image.jpg?resize=685%2C1024&amp;ssl=1 685w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image.jpg?resize=201%2C300&amp;ssl=1 201w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image.jpg?resize=768%2C1147&amp;ssl=1 768w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image.jpg?w=836&amp;ssl=1 836w\" data-sizes=\"(max-width: 685px) 100vw, 685px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-4d44ef61-fa52-4728-9d62-af65fb2d2e42\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image-1.jpg\">Click Button to download the input image<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/image-1.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-4d44ef61-fa52-4728-9d62-af65fb2d2e42\">Download<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 07Image_Split.py \" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">07<\/span><span style=\"color: #9ECBFF\">Image_Split.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TL-6.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"418\" height=\"624\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TL-6.png?resize=418%2C624&#038;ssl=1\" alt=\"\" class=\"wp-image-2384 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TL-6.png?w=418&amp;ssl=1 418w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TL-6.png?resize=201%2C300&amp;ssl=1 201w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/624;\" \/><\/a><figcaption class=\"wp-element-caption\">Top Left<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TR-2.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"418\" height=\"624\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TR-2.png?resize=418%2C624&#038;ssl=1\" alt=\"\" class=\"wp-image-2385 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TR-2.png?w=418&amp;ssl=1 418w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/TR-2.png?resize=201%2C300&amp;ssl=1 201w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/624;\" \/><\/a><figcaption class=\"wp-element-caption\">Top Right<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BL-4.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"418\" height=\"625\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BL-4.png?resize=418%2C625&#038;ssl=1\" alt=\"\" class=\"wp-image-2386 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BL-4.png?w=418&amp;ssl=1 418w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BL-4.png?resize=201%2C300&amp;ssl=1 201w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/625;\" \/><\/a><figcaption class=\"wp-element-caption\">Bottom Left<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BR-4.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"418\" height=\"625\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BR-4.png?resize=418%2C625&#038;ssl=1\" alt=\"\" class=\"wp-image-2387 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BR-4.png?w=418&amp;ssl=1 418w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BR-4.png?resize=201%2C300&amp;ssl=1 201w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/625;\" \/><\/a><figcaption class=\"wp-element-caption\">Bottom Right<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P08\">Question 8<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"> Rotation, Scaling and Translation on an image<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\"><strong>Write a program to show rotation, scaling, and translation on an image.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import cv2\nimport numpy as np\n\n# Read the image\nimage_path = &quot;Che.jpg&quot;  # Replace &quot;your_image.jpg&quot; with the path to your image\nimage = cv2.imread(image_path)\n\nif image is None:\n    print(&quot;Failed to load the image.&quot;)\nelse:\n    # Display the original image\n    cv2.imshow(&quot;Original Image&quot;, image)\n\n    # Rotation\n    angle = 45  # Rotation angle in degrees\n    center = (image.shape[1] \/\/ 2, image.shape[0] \/\/ 2)  # Center of rotation\n    rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1.0)  # Rotation matrix\n    rotated_image = cv2.warpAffine(image, rotation_matrix, (image.shape[1], image.shape[0]))\n\n    # Scaling\n    scale_factor = 0.5  # Scaling factor (0.5 means half the size)\n    scaled_image = cv2.resize(image, None, fx=scale_factor, fy=scale_factor)\n\n    # Translation\n    translation_matrix = np.float32([[1, 0, 100], [0, 1, -50]])  # Translation matrix (100 pixels right, 50 pixels up)\n    translated_image = cv2.warpAffine(image, translation_matrix, (image.shape[1], image.shape[0]))\n\n    # Display the transformed images\n    cv2.imshow(&quot;Rotated Image&quot;, rotated_image)\n    cv2.imshow(&quot;Scaled Image&quot;, scaled_image)\n    cv2.imshow(&quot;Translated Image&quot;, translated_image)\n\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> cv2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> numpy <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> np<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Read the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Che.jpg<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Replace &quot;your_image.jpg&quot; with the path to your image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.imread(image_path)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> image <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Failed to load the image.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the original image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Original Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Rotation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    angle <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">45<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Rotation angle in degrees<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    center <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (image.shape[<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">] <\/span><span style=\"color: #FF79C6\">\/\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, image.shape[<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">] <\/span><span style=\"color: #FF79C6\">\/\/<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">)  <\/span><span style=\"color: #6272A4\"># Center of rotation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    rotation_matrix <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.getRotationMatrix2D(center, angle, <\/span><span style=\"color: #BD93F9\">1.0<\/span><span style=\"color: #F8F8F2\">)  <\/span><span style=\"color: #6272A4\"># Rotation matrix<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    rotated_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.warpAffine(image, rotation_matrix, (image.shape[<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">], image.shape[<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">]))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Scaling<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    scale_factor <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0.5<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Scaling factor (0.5 means half the size)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    scaled_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.resize(image, <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">fx<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\">scale_factor, <\/span><span style=\"color: #FFB86C; font-style: italic\">fy<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\">scale_factor)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Translation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    translation_matrix <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> np.float32([[<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">100<\/span><span style=\"color: #F8F8F2\">], [<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">50<\/span><span style=\"color: #F8F8F2\">]])  <\/span><span style=\"color: #6272A4\"># Translation matrix (100 pixels right, 50 pixels up)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    translated_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.warpAffine(image, translation_matrix, (image.shape[<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">], image.shape[<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">]))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the transformed images<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Rotated Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, rotated_image)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Scaled Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, scaled_image)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Translated Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, translated_image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.waitKey(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.destroyAllWindows()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We read an image from a file specified by <code>image_path<\/code>.<\/li>\n\n\n\n<li>If the image is loaded successfully, we display the original image using <code>cv2.imshow<\/code>.<\/li>\n\n\n\n<li>We then perform three transformations on the image:\n<ol class=\"wp-block-list\">\n<li>Rotation: We rotate the image by an angle of 45 degrees around its center using <code>cv2.getRotationMatrix2D<\/code> and <code>cv2.warpAffine<\/code>.<\/li>\n\n\n\n<li>Scaling: We scale down the image by a factor of 0.5 using <code>cv2.resize<\/code>.<\/li>\n\n\n\n<li>Translation: We translate the image by 100 pixels to the right and 50 pixels up using a translation matrix and <code>cv2.warpAffine<\/code>.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Finally, we display the transformed images (<code>rotated_image<\/code>, <code>scaled_image<\/code>, and <code>translated_image<\/code>) using <code>cv2.imshow<\/code>.<\/li>\n\n\n\n<li>We wait for any key press to close the windows and then use <code>cv2.destroyAllWindows()<\/code> to clean up and close all OpenCV windows.<\/li>\n<\/ul>\n\n\n\n<p>You can replace <code>\"Che.jpg\"<\/code> with the path to your own image file. Run this script, and you&#8217;ll see the original image and the transformed images (rotated, scaled, and translated) displayed in separate windows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Input Image<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"800\" height=\"926\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che.jpg?resize=800%2C926&#038;ssl=1\" alt=\"\" class=\"wp-image-2391 lazyload\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/926;width:434px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che.jpg?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che.jpg?resize=259%2C300&amp;ssl=1 259w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che.jpg?resize=768%2C889&amp;ssl=1 768w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file has-e-1-e-4-e-8-color has-text-color\"><a id=\"wp-block-file--media-935196bd-8cfe-4835-8b3e-ac7c8058c5a5\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-1.jpg\">Click Button to download the input image<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-1.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-935196bd-8cfe-4835-8b3e-ac7c8058c5a5\">Download<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 08_TrasnsformImage.py \" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">08<\/span><span style=\"color: #9ECBFF\">_TrasnsformImage.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-2.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"800\" height=\"926\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-2.jpg?resize=800%2C926&#038;ssl=1\" alt=\"\" class=\"wp-image-2397 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-2.jpg?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-2.jpg?resize=259%2C300&amp;ssl=1 259w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Che-2.jpg?resize=768%2C889&amp;ssl=1 768w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/926;\" \/><\/a><figcaption class=\"wp-element-caption\">Original Image<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Translated_Image.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"800\" height=\"926\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Translated_Image.png?resize=800%2C926&#038;ssl=1\" alt=\"\" class=\"wp-image-2395 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Translated_Image.png?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Translated_Image.png?resize=259%2C300&amp;ssl=1 259w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Translated_Image.png?resize=768%2C889&amp;ssl=1 768w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/926;\" \/><\/a><figcaption class=\"wp-element-caption\">Translated Image<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Rotated_Image.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"800\" height=\"926\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Rotated_Image.png?resize=800%2C926&#038;ssl=1\" alt=\"\" class=\"wp-image-2396 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Rotated_Image.png?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Rotated_Image.png?resize=259%2C300&amp;ssl=1 259w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Rotated_Image.png?resize=768%2C889&amp;ssl=1 768w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/926;\" \/><\/a><figcaption class=\"wp-element-caption\">Rotated Image<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Scaled_Image.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"400\" height=\"463\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Scaled_Image.png?resize=400%2C463&#038;ssl=1\" alt=\"\" class=\"wp-image-2398 lazyload\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/463;width:137px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Scaled_Image.png?w=400&amp;ssl=1 400w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Scaled_Image.png?resize=259%2C300&amp;ssl=1 259w\" data-sizes=\"(max-width: 400px) 100vw, 400px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><figcaption class=\"wp-element-caption\">Scaled Image<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P09\">Question 9<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Feature Extraction<\/h2>\n\n\n\n<p>Read an image and extract and display low-level features such as edges, textures using filtering techniques.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import cv2\nimport numpy as np\n\n# Read the image\nimage_path = &quot;gandhi.jpg&quot;  # Replace &quot;your_image.jpg&quot; with the path to your image\nimage = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)\n\nif image is None:\n    print(&quot;Failed to load the image.&quot;)\nelse:\n    # Display the original image\n    cv2.imshow(&quot;Original Image&quot;, image)\n\n    # Apply Sobel filter to extract edges\n    sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)\n    sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)\n    sobel_edges = cv2.magnitude(sobel_x, sobel_y)\n    sobel_edges = cv2.normalize(sobel_edges, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)\n\n    # Display edges extracted using Sobel filter\n    cv2.imshow(&quot;Edges (Sobel Filter)&quot;, sobel_edges)\n\n    # Apply Laplacian filter to extract edges\n    laplacian_edges = cv2.Laplacian(image, cv2.CV_64F)\n    laplacian_edges = cv2.normalize(laplacian_edges, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)\n\n    # Display edges extracted using Laplacian filter\n    cv2.imshow(&quot;Edges (Laplacian Filter)&quot;, laplacian_edges)\n\n    # Apply Gaussian blur to extract textures\n    gaussian_blur = cv2.GaussianBlur(image, (5, 5), 0)\n\n    # Display image with Gaussian blur\n    cv2.imshow(&quot;Gaussian Blur&quot;, gaussian_blur)\n\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> cv2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> numpy <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> np<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Read the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">gandhi.jpg<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Replace &quot;your_image.jpg&quot; with the path to your image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.imread(image_path, cv2.<\/span><span style=\"color: #BD93F9\">IMREAD_GRAYSCALE<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> image <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Failed to load the image.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the original image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Original Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply Sobel filter to extract edges<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    sobel_x <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.Sobel(image, cv2.<\/span><span style=\"color: #BD93F9\">CV_64F<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">ksize<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    sobel_y <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.Sobel(image, cv2.<\/span><span style=\"color: #BD93F9\">CV_64F<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">ksize<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    sobel_edges <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.magnitude(sobel_x, sobel_y)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    sobel_edges <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.normalize(sobel_edges, <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">255<\/span><span style=\"color: #F8F8F2\">, cv2.<\/span><span style=\"color: #BD93F9\">NORM_MINMAX<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">dtype<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\">cv2.<\/span><span style=\"color: #BD93F9\">CV_8U<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display edges extracted using Sobel filter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Edges (Sobel Filter)<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, sobel_edges)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply Laplacian filter to extract edges<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    laplacian_edges <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.Laplacian(image, cv2.<\/span><span style=\"color: #BD93F9\">CV_64F<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    laplacian_edges <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.normalize(laplacian_edges, <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">255<\/span><span style=\"color: #F8F8F2\">, cv2.<\/span><span style=\"color: #BD93F9\">NORM_MINMAX<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">dtype<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\">cv2.<\/span><span style=\"color: #BD93F9\">CV_8U<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display edges extracted using Laplacian filter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Edges (Laplacian Filter)<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, laplacian_edges)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply Gaussian blur to extract textures<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    gaussian_blur <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.GaussianBlur(image, (<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">), <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display image with Gaussian blur<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Gaussian Blur<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, gaussian_blur)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.waitKey(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.destroyAllWindows()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We read an image from a file specified by <code>image_path<\/code> using <code>cv2.imread<\/code>.<\/li>\n\n\n\n<li>We convert the image to grayscale since most filtering techniques operate on single-channel images.<\/li>\n\n\n\n<li>We display the original grayscale image using <code>cv2.imshow<\/code>.<\/li>\n\n\n\n<li>We apply the Sobel filter in both horizontal and vertical directions to extract edges using <code>cv2.Sobel<\/code>.<\/li>\n\n\n\n<li>We compute the magnitude of gradients obtained from the Sobel filter using <code>cv2.magnitude<\/code>.<\/li>\n\n\n\n<li>We normalize the result to the range [0, 255] using <code>cv2.normalize<\/code>.<\/li>\n\n\n\n<li>We display the edges extracted using the Sobel filter.<\/li>\n\n\n\n<li>We apply the Laplacian filter to extract edges using <code>cv2.Laplacian<\/code>.<\/li>\n\n\n\n<li>We normalize the result to the range [0, 255].<\/li>\n\n\n\n<li>We display the edges extracted using the Laplacian filter.<\/li>\n\n\n\n<li>We apply Gaussian blur to the image to extract textures using <code>cv2.GaussianBlur<\/code>.<\/li>\n\n\n\n<li>We display the image with Gaussian blur.<\/li>\n\n\n\n<li>We use <code>cv2.waitKey(0)<\/code> to wait for any key press to close the windows, and <code>cv2.destroyAllWindows()<\/code> to clean up and close all OpenCV windows.<\/li>\n<\/ul>\n\n\n\n<p>You can replace <code>\"gandhi.jpg\"<\/code> with the path to your own image file. Run this script, and you&#8217;ll see the original grayscale image along with the edges extracted using Sobel and Laplacian filters, as well as the image with Gaussian blur applied to it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Input Image<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"819\" height=\"500\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi.jpg?resize=819%2C500&#038;ssl=1\" alt=\"\" class=\"wp-image-2402 lazyload\" style=\"--smush-placeholder-width: 819px; --smush-placeholder-aspect-ratio: 819\/500;width:434px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi.jpg?w=819&amp;ssl=1 819w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi.jpg?resize=300%2C183&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi.jpg?resize=768%2C469&amp;ssl=1 768w\" data-sizes=\"(max-width: 819px) 100vw, 819px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file has-e-1-e-4-e-8-color has-text-color\"><a id=\"wp-block-file--media-4777d9d6-5dbd-47b5-bb8a-879c1a901f74\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi-1.jpg\">Click Button to download the input image<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/gandhi-1.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-4777d9d6-5dbd-47b5-bb8a-879c1a901f74\">Download<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 09_ImageFeatures.py\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">09<\/span><span style=\"color: #9ECBFF\">_ImageFeatures.py<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Sobel_Filter-1.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"819\" height=\"500\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Sobel_Filter-1.png?resize=819%2C500&#038;ssl=1\" alt=\"\" class=\"wp-image-2406 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Sobel_Filter-1.png?w=819&amp;ssl=1 819w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Sobel_Filter-1.png?resize=300%2C183&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Sobel_Filter-1.png?resize=768%2C469&amp;ssl=1 768w\" data-sizes=\"(max-width: 819px) 100vw, 819px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 819px; --smush-placeholder-aspect-ratio: 819\/500;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Edges (Sobel Filter)<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Laplacian_Filter-1.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"819\" height=\"500\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Laplacian_Filter-1.png?resize=819%2C500&#038;ssl=1\" alt=\"\" class=\"wp-image-2408 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Laplacian_Filter-1.png?w=819&amp;ssl=1 819w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Laplacian_Filter-1.png?resize=300%2C183&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Edges_Laplacian_Filter-1.png?resize=768%2C469&amp;ssl=1 768w\" data-sizes=\"(max-width: 819px) 100vw, 819px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 819px; --smush-placeholder-aspect-ratio: 819\/500;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Edges (Laplacian Filter)<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blur.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"819\" height=\"500\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blur.png?resize=819%2C500&#038;ssl=1\" alt=\"\" class=\"wp-image-2409 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blur.png?w=819&amp;ssl=1 819w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blur.png?resize=300%2C183&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blur.png?resize=768%2C469&amp;ssl=1 768w\" data-sizes=\"(max-width: 819px) 100vw, 819px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 819px; --smush-placeholder-aspect-ratio: 819\/500;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Gaussian Blur<\/strong><\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P10\">Question 10<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Blur and Smoothing<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\">Write a program to blur and smoothing an image.<\/p>\n\n\n\n<p>Blurring and smoothing are common image processing techniques used to reduce noise and detail in images. OpenCV provides various functions to perform blurring and smoothing operations. Below is a Python program using OpenCV to read an image, apply blur and smoothing filters, and display the results:<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import cv2\n\n# Read the image\nimage_path = &quot;art.png&quot;  # Replace &quot;your_image.jpg&quot; with the path to your image\nimage = cv2.imread(image_path)\n\nif image is None:\n    print(&quot;Failed to load the image.&quot;)\nelse:\n    # Display the original image\n    cv2.imshow(&quot;Original Image&quot;, image)\n\n    # Apply blur to the image\n    blur_kernel_size = (5, 5)  # Kernel size for blur filter\n    blurred_image = cv2.blur(image, blur_kernel_size)\n\n    # Display the blurred image\n    cv2.imshow(&quot;Blurred Image&quot;, blurred_image)\n\n    # Apply Gaussian blur to the image\n    gaussian_blur_kernel_size = (5, 5)  # Kernel size for Gaussian blur filter\n    gaussian_blurred_image = cv2.GaussianBlur(image, gaussian_blur_kernel_size, 0)\n\n    # Display the Gaussian blurred image\n    cv2.imshow(&quot;Gaussian Blurred Image&quot;, gaussian_blurred_image)\n\n    # Apply median blur to the image\n    median_blur_kernel_size = 5  # Kernel size for median blur filter (should be odd)\n    median_blurred_image = cv2.medianBlur(image, median_blur_kernel_size)\n\n    # Display the median blurred image\n    cv2.imshow(&quot;Median Blurred Image&quot;, median_blurred_image)\n\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> cv2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Read the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">art.png<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Replace &quot;your_image.jpg&quot; with the path to your image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.imread(image_path)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> image <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Failed to load the image.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the original image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Original Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply blur to the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    blur_kernel_size <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">)  <\/span><span style=\"color: #6272A4\"># Kernel size for blur filter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    blurred_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.blur(image, blur_kernel_size)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the blurred image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Blurred Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, blurred_image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply Gaussian blur to the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    gaussian_blur_kernel_size <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">)  <\/span><span style=\"color: #6272A4\"># Kernel size for Gaussian blur filter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    gaussian_blurred_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.GaussianBlur(image, gaussian_blur_kernel_size, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the Gaussian blurred image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Gaussian Blurred Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, gaussian_blurred_image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply median blur to the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    median_blur_kernel_size <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Kernel size for median blur filter (should be odd)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    median_blurred_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.medianBlur(image, median_blur_kernel_size)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the median blurred image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Median Blurred Image<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, median_blurred_image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.waitKey(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.destroyAllWindows()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We read an image from a file specified by <code>image_path<\/code> using <code>cv2.imread<\/code>.<\/li>\n\n\n\n<li>We display the original image using <code>cv2.imshow<\/code>.<\/li>\n\n\n\n<li>We apply three different blurring techniques:\n<ol class=\"wp-block-list\">\n<li><strong>Blur<\/strong>: We apply a simple averaging filter to the image using <code>cv2.blur<\/code>.<\/li>\n\n\n\n<li><strong>Gaussian Blur<\/strong>: We apply Gaussian blur to the image using <code>cv2.GaussianBlur<\/code>. This is more effective in reducing noise while preserving edges compared to simple blur.<\/li>\n\n\n\n<li><strong>Median Blur<\/strong>: We apply median blur to the image using <code>cv2.medianBlur<\/code>. This is effective in removing salt-and-pepper noise.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>We display the blurred images using <code>cv2.imshow<\/code>.<\/li>\n\n\n\n<li>We use <code>cv2.waitKey(0)<\/code> to wait for any key press to close the windows, and <code>cv2.destroyAllWindows()<\/code> to clean up and close all OpenCV windows.<\/li>\n<\/ul>\n\n\n\n<p>You can replace <code>\"art.png\"<\/code> with the path to your own image file. Run this script, and you&#8217;ll see the original image along with the images after applying different blur and smoothing filters.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Input Image<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"304\" height=\"409\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art.png?resize=304%2C409&#038;ssl=1\" alt=\"\" class=\"wp-image-2412 lazyload\" style=\"--smush-placeholder-width: 304px; --smush-placeholder-aspect-ratio: 304\/409;width:434px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art.png?w=304&amp;ssl=1 304w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art.png?resize=223%2C300&amp;ssl=1 223w\" data-sizes=\"(max-width: 304px) 100vw, 304px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file has-e-1-e-4-e-8-color has-text-color\"><a id=\"wp-block-file--media-bacfe0ff-a27b-4218-bdd7-49ce59482384\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art-1.png\">Click Button to download the input image<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art-1.png\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-bacfe0ff-a27b-4218-bdd7-49ce59482384\">Download<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python3 10_Blur_Smooth_image.py \" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">10<\/span><span style=\"color: #9ECBFF\">_Blur_Smooth_image.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art-2.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"304\" height=\"409\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art-2.png?resize=304%2C409&#038;ssl=1\" alt=\"\" class=\"wp-image-2417 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art-2.png?w=304&amp;ssl=1 304w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/art-2.png?resize=223%2C300&amp;ssl=1 223w\" data-sizes=\"(max-width: 304px) 100vw, 304px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 304px; --smush-placeholder-aspect-ratio: 304\/409;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Original Image<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Blurred_Image.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"304\" height=\"409\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Blurred_Image.png?resize=304%2C409&#038;ssl=1\" alt=\"\" class=\"wp-image-2414 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Blurred_Image.png?w=304&amp;ssl=1 304w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Blurred_Image.png?resize=223%2C300&amp;ssl=1 223w\" data-sizes=\"(max-width: 304px) 100vw, 304px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 304px; --smush-placeholder-aspect-ratio: 304\/409;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Blurred Image<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blurred_Image.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"304\" height=\"409\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blurred_Image.png?resize=304%2C409&#038;ssl=1\" alt=\"\" class=\"wp-image-2415 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blurred_Image.png?w=304&amp;ssl=1 304w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Gaussian_Blurred_Image.png?resize=223%2C300&amp;ssl=1 223w\" data-sizes=\"(max-width: 304px) 100vw, 304px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 304px; --smush-placeholder-aspect-ratio: 304\/409;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Gaussian Blurred Image<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Median_Blurred_Image.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"304\" height=\"409\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Median_Blurred_Image.png?resize=304%2C409&#038;ssl=1\" alt=\"\" class=\"wp-image-2416 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Median_Blurred_Image.png?w=304&amp;ssl=1 304w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Median_Blurred_Image.png?resize=223%2C300&amp;ssl=1 223w\" data-sizes=\"(max-width: 304px) 100vw, 304px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 304px; --smush-placeholder-aspect-ratio: 304\/409;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Median Blurred Image<\/strong><\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P11\">Question 11<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Contour detection<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\">Write a program to contour an image.<\/p>\n\n\n\n<p>Contour detection is a fundamental image processing technique used to find and outline the shapes of objects within an image. OpenCV provides functions to detect contours in images efficiently. Below is a Python program using OpenCV to read an image, detect contours, and draw them on the original image:<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import cv2\n\n# Read the image\nimage_path = &quot;annavru.jpeg&quot;  # Replace &quot;your_image.jpg&quot; with the path to your image\nimage = cv2.imread(image_path)\n\nif image is None:\n    print(&quot;Failed to load the image.&quot;)\nelse:\n    # Convert the image to grayscale\n    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n    # Apply adaptive thresholding\n    _, thresh = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)\n\n    # Find contours in the thresholded image\n    contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\n\n    # Draw contours on the original image\n    contour_image = image.copy()\n    cv2.drawContours(contour_image, contours, -1, (0, 255, 0), 2)  # Draw all contours with green color and thickness 2\n\n    # Display the original image with contours\n    cv2.imshow(&quot;Image with Contours&quot;, contour_image)\n\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> cv2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Read the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">annavru.jpeg<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Replace &quot;your_image.jpg&quot; with the path to your image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.imread(image_path)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> image <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Failed to load the image.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Convert the image to grayscale<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    gray_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.cvtColor(image, cv2.<\/span><span style=\"color: #BD93F9\">COLOR_BGR2GRAY<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Apply adaptive thresholding<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    _, thresh <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.threshold(gray_image, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">255<\/span><span style=\"color: #F8F8F2\">, cv2.<\/span><span style=\"color: #BD93F9\">THRESH_BINARY_INV<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> cv2.<\/span><span style=\"color: #BD93F9\">THRESH_OTSU<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Find contours in the thresholded image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    contours, _ <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.findContours(thresh, cv2.<\/span><span style=\"color: #BD93F9\">RETR_EXTERNAL<\/span><span style=\"color: #F8F8F2\">, cv2.<\/span><span style=\"color: #BD93F9\">CHAIN_APPROX_SIMPLE<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Draw contours on the original image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    contour_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> image.copy()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.drawContours(contour_image, contours, <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, (<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">255<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">), <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">)  <\/span><span style=\"color: #6272A4\"># Draw all contours with green color and thickness 2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the original image with contours<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Image with Contours<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, contour_image)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.waitKey(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.destroyAllWindows()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We read an image from a file specified by <code>image_path<\/code> using <code>cv2.imread<\/code>.<\/li>\n\n\n\n<li>We convert the image to grayscale using <code>cv2.cvtColor<\/code>.<\/li>\n\n\n\n<li>We apply adaptive thresholding (<code>cv2.threshold<\/code>) to create a binary image where the regions of interest are highlighted.<\/li>\n\n\n\n<li>We find contours in the thresholded image.<\/li>\n\n\n\n<li>We find contours in the thresholded image using <code>cv2.findContours<\/code>. The <code>cv2.RETR_EXTERNAL<\/code> flag retrieves only the external contours, and <code>cv2.CHAIN_APPROX_SIMPLE<\/code> compresses horizontal, vertical, and diagonal segments and leaves only their end points.<\/li>\n\n\n\n<li>We draw the detected contours on a copy of the original image using <code>cv2.drawContours<\/code>. The contours are drawn with green color and thickness 2.<\/li>\n\n\n\n<li>We display the original image with contours using <code>cv2.imshow<\/code>.<\/li>\n\n\n\n<li>We use <code>cv2.waitKey(0)<\/code> to wait for any key press to close the window, and <code>cv2.destroyAllWindows()<\/code> to clean up and close all OpenCV windows.<\/li>\n<\/ul>\n\n\n\n<p>You can replace <code>\"annavru.jpeg\"<\/code> with the path to your own image file. Run this script, and you&#8217;ll see the original image with the detected<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Input Image<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru.jpeg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"715\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru.jpeg?resize=1024%2C715&#038;ssl=1\" alt=\"\" class=\"wp-image-2421 lazyload\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/715;width:434px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru.jpeg?resize=1024%2C715&amp;ssl=1 1024w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru.jpeg?resize=300%2C210&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru.jpeg?resize=768%2C536&amp;ssl=1 768w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru.jpeg?w=1280&amp;ssl=1 1280w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file has-e-1-e-4-e-8-color has-text-color\"><a id=\"wp-block-file--media-e45c14de-a842-4649-a59e-7855c4f7957a\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru-1.jpeg\">Click Button to download the input image<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/annavru-1.jpeg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-e45c14de-a842-4649-a59e-7855c4f7957a\">Download<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 11_Contour_Detect.py \" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">11<\/span><span style=\"color: #9ECBFF\">_Contour_Detect.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Contours.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"715\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Contours.png?resize=1024%2C715&#038;ssl=1\" alt=\"\" class=\"wp-image-2423 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Contours.png?resize=1024%2C715&amp;ssl=1 1024w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Contours.png?resize=300%2C210&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Contours.png?resize=768%2C536&amp;ssl=1 768w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Contours.png?w=1280&amp;ssl=1 1280w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/715;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Image with Contours<\/strong><\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P12\">Question 12<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Face Detection<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-e-1-e-4-e-8-color has-text-color\">Write a program to detect a face\/s in an image.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Program<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import cv2\n\n# Load the pre-trained Haar Cascade classifier for face detection\nface_cascade = cv2.CascadeClassifier('.\/haarcascades\/haarcascade_frontalface_default.xml')\n\n# Read the image\nimage_path = &quot;ucl.png&quot;  # Replace &quot;ucl.png&quot; with the path to your image\nimage = cv2.imread(image_path)\n\nif image is None:\n    print(&quot;Failed to load the image.&quot;)\nelse:\n    # Convert the image to grayscale\n    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n\n    # Detect faces in the image\n    faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))\n\n    # Draw rectangles around the detected faces\n    for (x, y, w, h) in faces:\n        cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)\n\n    # Display the image with detected faces\n    cv2.imshow(&quot;Image with Detected Faces&quot;, image)\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> cv2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Load the pre-trained Haar Cascade classifier for face detection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">face_cascade <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.CascadeClassifier(<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">.\/haarcascades\/haarcascade_frontalface_default.xml<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Read the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">ucl.png<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Replace &quot;ucl.png&quot; with the path to your image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.imread(image_path)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> image <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Failed to load the image.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Convert the image to grayscale<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    gray_image <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cv2.cvtColor(image, cv2.<\/span><span style=\"color: #BD93F9\">COLOR_BGR2GRAY<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Detect faces in the image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    faces <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> face_cascade.detectMultiScale(gray_image, <\/span><span style=\"color: #FFB86C; font-style: italic\">scaleFactor<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #BD93F9\">1.1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">minNeighbors<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">minSize<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">30<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">30<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Draw rectangles around the detected faces<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> (x, y, w, h) <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> faces:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        cv2.rectangle(image, (x, y), (x<\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\">w, y<\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\">h), (<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">255<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">), <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Display the image with detected faces<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.imshow(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Image with Detected Faces<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, image)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.waitKey(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cv2.destroyAllWindows()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Input Image<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-1.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"899\" height=\"453\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-1.png?resize=899%2C453&#038;ssl=1\" alt=\"\" class=\"wp-image-2429 lazyload\" style=\"--smush-placeholder-width: 899px; --smush-placeholder-aspect-ratio: 899\/453;width:434px;height:auto\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-1.png?w=899&amp;ssl=1 899w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-1.png?resize=300%2C151&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-1.png?resize=768%2C387&amp;ssl=1 768w\" data-sizes=\"(max-width: 899px) 100vw, 899px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file has-e-1-e-4-e-8-color has-text-color\"><a id=\"wp-block-file--media-d0c961c3-4f97-4260-8981-002c889ca6c0\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-2.png\">Click Button to download the input image<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ucl-2.png\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d0c961c3-4f97-4260-8981-002c889ca6c0\">Download<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 12_Face_Detect.py\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">$ python 12_Face_Detect.py<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Detected_Faces.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"899\" height=\"453\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Detected_Faces.png?resize=899%2C453&#038;ssl=1\" alt=\"\" class=\"wp-image-2432 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Detected_Faces.png?w=899&amp;ssl=1 899w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Detected_Faces.png?resize=300%2C151&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/Image_with_Detected_Faces.png?resize=768%2C387&amp;ssl=1 768w\" data-sizes=\"(max-width: 899px) 100vw, 899px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 899px; --smush-placeholder-aspect-ratio: 899\/453;\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Image with Detected Faces<\/strong><\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<p>If you are also looking for other Lab Manuals, head over to my following blog :<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-myblogosphere wp-block-embed-myblogosphere\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"5RYvUyVpY1\"><a href=\"https:\/\/moodle.sit.ac.in\/blog\/vtu-lab-manuals-using-foss\/\">VTU Lab Manuals using FOSS<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;VTU Lab Manuals using FOSS&#8221; &#8212; MyBlogosphere\" data-src=\"https:\/\/moodle.sit.ac.in\/blog\/vtu-lab-manuals-using-foss\/embed\/#?secret=FnF2KHImVR#?secret=5RYvUyVpY1\" data-secret=\"5RYvUyVpY1\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, you will find solutions for the COMPUTER GRAPHICS AND IMAGE PROCESSING LABORATORY (21CSL66) course work for the VI semester of VTU university. To follow along, you will need to have up a machine running any flavour of GNULinux OS. We recommend using the GCC compiler for this lab. The solutions have [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2443,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[365,345,369,364,363,78,26,370,35,366,40,344,43],"class_list":["post-2328","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","tag-21csl66","tag-6th-semester","tag-computer-graphics","tag-computer-graphics-and-image-processing-laboratory","tag-computer-graphics-and-image-processing-laboratory-21csl66","tag-cse","tag-foss","tag-image-processing","tag-lab-manual","tag-opengl","tag-python","tag-vi-semester","tag-vtu"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/cg-2.png?fit=1095%2C213&ssl=1","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts\/2328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/comments?post=2328"}],"version-history":[{"count":56,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts\/2328\/revisions"}],"predecessor-version":[{"id":2442,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts\/2328\/revisions\/2442"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/media\/2443"}],"wp:attachment":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/media?parent=2328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/categories?post=2328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/tags?post=2328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}