and multiplicative scaling. By updating the individual pixel values in the image’s matrix, you can manipulate the
image in various ways to achieve the desired result. We will provide you with the starting code and required files
for the project.
Environment Setup
Code link:
1. Set up visual studio code for C/C++: Visual Studio Code C/C++ setup.
2. Download the code and set up your environment.
3. Rename the file FIRSTNAME LASTNAME NETID with your first name, last name, and NETID.
4. Test by running make. To learn more about make, read this Makefile tutorial.
Part I (35 points)
Create a templated class named Vector that serves as a fundamental component for implementing matrices in the
image-processing library (from Project 1) that performs matrix operations on images. The Vector class should be
capable of storing a collection of homogeneous data of any data type. Implement the class using either an array or
a linked list, based on your preference. The class should provide the following functionalities:
1. int getsize(): A member function that returns the size of the vector, i.e., the number of elements it
contains.
2. Copy constructor: A constructor that creates a new vector as a copy of an existing one.
3. Assignment operator (operator=): An operator that allows the assignment of one vector to another.
4. Destructor: A destructor that cleans up any resources the vector uses.
5. Input and output stream operators (operator>> and operator<<): Operators that allow reading from and
writing to input and output streams, respectively.
6. Arithmetic operators (operator+, operator-, and operator*): Operators that allow addition, subtraction, and multiplication of vectors.
7. Subscript operator (operator[]): An operator that provides access to individual elements of the vector
based on their index.
8. Additionally, implement any member functions as virtual if you believe they should be overrideable in derived classes. This class will later be used to create the Matrix class, which will be an essential part of the
image-processing library.
9. Constructors also need to be defined for the Vector object to be usable.
2
Part II (35 points)
Create a new class named Matrix that represents a matrix of elements of type uint8 t. The Matrix class should
utilize the Vector class through composition to implement the matrix structure, where each row or column of
the matrix is represented as an instance of the Vector class. The class should provide implementations for the
following operators and member functions:
1. Copy constructor
2. Assignment operator (operator=)
3. Destructor
4. Input and output stream operators (operator>> and operator<<)
5. Arithmetic operators (operator+, operator-, and operator*)
6. Subscript operator (operator[])
Additionally, implement the following new member functions in the Matrix class:
1. int getrows(): A member function that returns the number of rows in the matrix.
2. int getcols(): A member function that returns the number of columns in the matrix.
The Matrix class will serve as an essential component in the image-processing library (from Project 1) that performs matrix operations on images. The composition of Vector instances allows the Matrix class to leverage the
functionalities of the Vector class while maintaining the semantic distinction between vectors and matrices.
Part III (30 points)
Create a new Image class that inherits from the Matrix class and implements all the functions described in Project
1. The Image class should have the following properties:
• filePath: The file path for the image.
• numChannels: The number of color channels (e.g., 3 for RGB images).
• width: The width of the image in pixels.
• height: The height of the image in pixels.
The Image class should be capable of performing the following operations on images:
1. Scaling an image
2. Adding two images
3. Subtracting two images
4. Multiplying two images
The operations for scaling, adding, subtracting, and multiplying images should be implemented as overloaded
operators (+, -, and *).
3
Part IV (30 points) EXTRA CREDIT
• Add a function called transpose() to the Matrix class. This function should generate the transpose of
the original matrix, such that each element in the transposed matrix MT is given by the formula MT
i j = Mji,
where Mji is the element in the j-th row and i-th column of the original matrix M. The resulting matrix MT
should have dimensions that are the transpose of the original matrix’s dimensions, i.e., if the original matrix
M has dimensions m ⇥ n, the transposed matrix MT should have dimensions n ⇥ m.
• Additionally, create a function called resize() in the Image class that uses the stb image resize library
to resize an image and populates the Image object accordingly. The resize() function should take the
original image of dimensions m ⇥ n (height m and width n) and produce a resized image of dimensions p ⇥ q
(new height p and new width q), where p and q are the target dimensions for resizing. Use the functions
provided by the stb image resize library to perform the resizing operation, preserving the aspect ratio
and visual content of the image while adjusting its size. The resized image should be stored in the Image
object.
You may want to write a main.cpp file that tests the Image class with real images, executing all the operations
implemented in the previous parts of this project.
Submission
Please zip your code and submit it via Canvas. You must include the file with your name and NETID (as specified
in Section and your modified headers.
An illustration of the file structure is shown below:
The file organizational structure for this project is as follows:
• FIRSTNAME LASTNAME NETID
• Makefile
• src
– Image.cpp
4
– Image.h
– Matrix.cpp
– Matrix.h
– Vector.h
– main.cpp
• stb image
– stb image.h
– stb image resize.h
– stb image write.h
请加QQ:99515681 邮箱:99515681@qq.com WX:codinghelp
- HGC环电强化国际业务领导架构 谭君骥及Ravindran Mahalingam分别担任专精职务
- 海伯森六维力传感器:助力人形机器人产业发展的创新力量
- 达闼董事长黄晓庆:以技术破局致胜从未止步
- 从辅助到核心,企业如何基于AI Agent升级品牌数字营销
- 国产2.5亿超高分辨率图像传感器发布,主要面向机器视觉领域
- 西部数据推出多款超高速、大容量存储解决方案
- 中关村e谷承办“科创耀未来 奋进谱新篇”企业家创新论坛圆满落幕
- 航科卫星“汕头数字一号”卫星发射成功!
- Gartner 最新魔力象限出炉!ManageEngine卓豪成功入围
- 科技重塑物流,英特尔&集和诚加速智慧物流发展!
- 数智赋能 向“新而行” 坦克与装甲车辆学术与发展论坛召开
- 赛诺威盛:大孔径专科化CT领航者
- 网易硬刚腾讯 两大游戏玩家之间的口水仗不断
- 全球“最独特”的一台华为 nova 6 5G 版手机是什么样子的?
- 拼多多抖音淘宝京东,谁是真低价?