当前位置: 首页 > news >正文

Linux系统学习Day2——在Linux系统中开发OpenCV

一、OpenCV简介

        OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉和机器学习库,广泛应用于图像处理、视频分析、物体检测等领域。它提供了丰富的算法和高效的工具集,支持C++、Python等多种语言,涵盖特征提取、目标识别、3D重建等功能,被广泛应用于人脸识别、自动驾驶、医学影像分析及工业检测等场景。凭借其开源特性、强大性能和活跃社区,OpenCV成为开发者实现计算机视觉任务的首选框架。

二、在Linux系统中开发OpenCV

1、创建一个代码文件夹code,并在其中创建 test1.cpp 文件。

2、将以下代码复制到 test1.cpp 文件中:

#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    CvPoint center;
    double scale = -3;

    IplImage* image = cvLoadImage("lena.jpg");
    argc == 2 ? cvLoadImage(argv[1]) : 0;

    cvShowImage("Image", image);

    if (!image) return -1;
    center = cvPoint(image->width / 2, image->height / 2);
    for (int i = 0; i < image->height; i++)
        for (int j = 0; j < image->width; j++) {
            double dx = (double)(j - center.x) / center.x;
            double dy = (double)(i - center.y) / center.y;
            double weight = exp((dx*dx + dy*dy)*scale);
            uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
            ptr[0] = cvRound(ptr[0] * weight);
            ptr[1] = cvRound(ptr[1] * weight);
            ptr[2] = cvRound(ptr[2] * weight);
        }

    Mat src;
    src = cvarrToMat(image);
    cv::imwrite("test.png", src);

    cvNamedWindow("test", 1);
    imshow("test", src);
    cvWaitKey();
    return 0;
}

3、运行以下命令来编译代码:

g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

4、在代码的相同目录下放一张待处理的图片,命名为:lena.jpg

5、运行程序:

./test1

6、实验结果:

  • 结果图前后对比:

  • 对图片进行亮度加权处理后,生成新的图片test.png。

总结:

        通过本次实验,我对OpenCV库在Linux系统中的应用有了更深入的理解。实验中,我成功创建了图像处理程序,实现了对图片的亮度加权处理,并生成了新的图片。这让我对OpenCV的强大功能有了更直观的认识。在编写和编译代码的过程中,我遇到了一些问题,但通过查阅资料和反复尝试,最终成功解决了问题。这次实验不仅提升了我的编程能力,也增强了我对图像处理技术的理解。未来,我希望能进一步探索OpenCV的更多功能,为实际项目开发提供技术支持。

参考博客:https://blog.csdn.net/weixin_56393108/article/details/120708930

相关文章:

  • 【微机及接口技术】- 第九章 串行通信与串行接口(上)
  • 路由表的最终地址 root 路由跟踪,最终到哪里去
  • RK-realtime Linux
  • python(49)-串口接收与发送
  • Android audio(6)-audiopolicyservice介绍
  • C++Cherno 学习笔记day17 [66]-[70] 类型双关、联合体、虚析构函数、类型转换、条件与操作断点
  • 华为OD全流程解析+备考攻略+经验分享
  • VS Code连接服务器编写Python文件
  • 【Docker】Dockerfile 编写实践
  • MYSQL数据库语法补充
  • 区间 DP 详解
  • XMLHttpRequest vs Fetch API:一场跨越时代的“浏览器宫斗剧“
  • 什么是软件测试(目的、意义、流程)
  • STM32在裸机(无RTOS)环境下,需要手动实现队列机制来替代FreeRTOS的CAN发送接收函数
  • 第四篇:系统分析师——12-16章
  • 《线性表、顺序表与链表》教案(C语言版本)
  • JavaScript性能优化(上)
  • 观成科技:利用DoH加密信道的C2流量分析
  • react实现SVG地图区域中心点呈现圆柱体,不同区域数据不同,圆柱体高度不同
  • oracle 存储体系结构
  • 【社论】公平有序竞争,外卖行业才能多赢
  • 安徽省委常委、合肥市委书记费高云卸任副省长职务
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点
  • 挖掘机4月销量同比增17.6%,出口增幅创近两年新高
  • 尹锡悦涉嫌发动内乱案举行第三次庭审
  • 巴西总统卢拉抵达北京