C++ OpenCV实现像素画的示例代码
程序员文章站
2022-06-22 11:55:51
目录准备工作代码实现完整代码最近在学习opencv,准备后续更新一波opencv相关的内容。代码实现主要是以 c++ 为主, 另外为了辅助学习,还会使用c# 开发一款桌面的软件,用于演示各种功能。今天...
最近在学习opencv,准备后续更新一波opencv相关的内容。代码实现主要是以 c++ 为主, 另外为了辅助学习,还会使用c# 开发一款桌面的软件,用于演示各种功能。
今天我给大家准备了一个类似于打马赛克的功能。通过像素的变化,演示一个像素画的功能。像素画在 nft 中特别的流行。
准备工作
需要安装好 opencv,opencv的安装过程在这里不再赘述。另外我们准备了一个图片。
代码实现
首先我们需要在 cmakelists.txt 文件中, 添加 opencv 的依赖
find_package(opencv 4 required) include_directories( ${opencv_include_dirs} ) target_link_libraries(${project_name} ${opencv_libraries})
读取文件
std::string path = "/path/to/img/"; cv::mat img = cv::imread(path +"meinv.jpeg");
获取原图的像素宽高,然后进行像素比缩放。
int height = img.size().height; int width = img.size().width; int pixel_size = 10; int new_width = width / pixel_size; int new_height = height / pixel_size;
根据设定的像素比, 对原图进行缩小,再放大的两次 resize 操作。这样就完成了像素图的处理。
cv::mat imgtmp; cv::resize(img, imgtmp, cv::size(new_width, new_height), 0, 0, cv::inter_linear); cv::resize(imgtmp, imgtmp, cv::size(width/2, height/2),0, 0, cv::inter_linear);
那我们来看下处理过之后的图像效果吧
效果看起来还可以,图片颜色单一图片尺寸稍微小一些的效果会好很多。
完整代码
#include <iostream> #include <opencv2/opencv.hpp> int main() { std::string path = "/users/wbf/desktop/"; cv::mat img = cv::imread(path +"meinv.jpeg"); cv::imshow("meinv", img); int height = img.size().height; int width = img.size().width; int pixel_size = 10; int new_width = width / pixel_size; int new_height = height / pixel_size; std::cout << new_height << "," << new_width << std::endl; cv::mat imgtmp; cv::resize(img, imgtmp, cv::size(new_width, new_height), 0, 0, cv::inter_linear); cv::resize(imgtmp, imgtmp, cv::size(width/2, height/2),0, 0, cv::inter_linear); // std::vector<cv::mat> v_mat ; // v_mat.push_back(img); // v_mat.push_back(imgtmp); cv::imshow("meinv2" , imgtmp); cv::waitkey(0); }
到此这篇关于c++ opencv实现像素画的示例代码的文章就介绍到这了,更多相关c++ opencv像素画内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: B2B网站后台管理系统侧导航
下一篇: C语言实现单链表节点的删除(带头结点)