欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ OpenCV实现像素画的示例代码

程序员文章站 2022-06-22 11:55:51
目录准备工作代码实现完整代码最近在学习opencv,准备后续更新一波opencv相关的内容。代码实现主要是以 c++ 为主, 另外为了辅助学习,还会使用c# 开发一款桌面的软件,用于演示各种功能。今天...

最近在学习opencv,准备后续更新一波opencv相关的内容。代码实现主要是以 c++ 为主, 另外为了辅助学习,还会使用c# 开发一款桌面的软件,用于演示各种功能。

今天我给大家准备了一个类似于打马赛克的功能。通过像素的变化,演示一个像素画的功能。像素画在 nft 中特别的流行。

准备工作

需要安装好 opencv,opencv的安装过程在这里不再赘述。另外我们准备了一个图片。

C++ 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);

那我们来看下处理过之后的图像效果吧

C++ OpenCV实现像素画的示例代码

效果看起来还可以,图片颜色单一图片尺寸稍微小一些的效果会好很多。

完整代码

#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像素画内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!