首页 > 编程语言 >机器学习实战-基于Python3和C++(4)-opencv(1)

机器学习实战-基于Python3和C++(4)-opencv(1)

时间:2023-07-11 16:12:11浏览次数:41  
标签:实战 Mat global 矩阵 opencv samples include parallel Python3

目录

读取图片

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
 std::string image_path = samples::findFile("starry_night.jpg");
 Mat img = imread(image_path, IMREAD_COLOR);
 if(img.empty())
 {
 std::cout << "Could not read the image: " << image_path << std::endl;
 return 1;
 }
 imshow("Display window", img);
 int k = waitKey(0); // Wait for a keystroke in the window
 if(k == 's')
 {
 imwrite("starry_night.png", img);
 }
 return 0;
}
g++ main.cpp -o learnopencv `pkg-config --cflags opencv4` `pkg-config --libs opencv4`

image

Mat

Mat基本上是一个有两个数据部分的类:矩阵头(包含矩阵的大小、存储方法、存储矩阵的地址等信息)和指向包含像素值的矩阵的指针(根据选择的存储方法采用任何维度)。矩阵头部大小是恒定的,然而矩阵本身的大小可能因图像而异,并且通常大几个数量级。

OpenCV是一个图像处理库。它包含大量图像处理功能。为了解决计算挑战,大多数时候你最终会使用库的多个函数。正因为如此,将图像传递给函数是一种常见的做法。
图像处理算法,这些算法往往计算量很大。我们最不想做的就是通过对可能较大的图像进行不必要的复制来进一步降低程序的速度。

为了解决这个问题,OpenCV使用了一个参考计数系统。其思想是,每个Mat对象都有自己的头,然而,通过使两个Mat对象的矩阵指针指向同一地址,可以在两个对象之间共享矩阵。此外,复制运算符将只复制指向大矩阵的标头和指针,而不是数据本身。

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
     std::string image_path = samples::findFile("starry_night.jpg");
     Mat img1 = imread(image_path, IMREAD_GRAYSCALE );
     if(img1.empty())
     {
         std::cout << "Could not read the image: " << image_path << std::endl;
         return 1;
     }
     imshow("Display window", img1);
      waitKey(0);
    Mat  img2(img1); // Use the copy constructor
    Mat  img3 = img1 ; // Assignment operator
    for (int i=0;i<20;i++){
       cout<<to_string(img2.data[100*img2.cols+i])<<" ";    
       img2.data[100*img1.cols+i]=0;
    }
    cout<<endl;
    for (int i=0;i<20;i++){
       cout<<to_string(img1.data[100*img1.cols+i])<<" ";    
    }
    cout<<endl;        
    for (int i=0;i<20;i++){
       cout<<to_string(img3.data[100*img3.cols+i])<<" ";    
    }
    cout<<endl;    
     imshow("Display window", img2); 
       waitKey(0);
     imshow("Display window", img3);  
     waitKey(0);
     return 0;
}

[maisipu@fedora opencv]$ ./learnopencv
[ WARN:[email protected]] global samples.cpp:61 findFile cv::samples::findFile('starry_night.jpg') => '/lib64/../share/opencv4/samples/data/starry_night.jpg'
[ INFO:[email protected]] global registry.impl.hpp:114 UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
QSocketNotifier: Can only be used with threads started with QThread
qt.qpa.qgnomeplatform.theme: The desktop style for QtQuick Controls 2 applications is not available on the system (qqc2-desktop-style). The application may look broken.
[ INFO:[email protected]] global registry_parallel.impl.hpp:96 ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:[email protected]] global parallel_for.tbb.hpp:54 ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:[email protected]] global parallel.cpp:77 createParallelForAPI core(parallel): using backend: TBB (priority=1000)
0 1 1 0 0 1 2 36 177 137 106 118 133 125 117 117 134 108 59 106 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

标签:实战,Mat,global,矩阵,opencv,samples,include,parallel,Python3
From: https://www.cnblogs.com/waterruby/p/17543381.html

相关文章

  • 求推荐丨想提升实战技能,寻找靠谱的网络靶场!
    背景介绍:自学网络安全知识,具备一定的理论基础,缺乏实战经验,想去网络靶场体验一下,通过实操能快速提升实战技能!可推荐的网络靶场:经过对比后,发现春秋云境.com漏洞靶标多,类型丰富,最重要的是完成注册就能快速上手,就它了!春秋云境com介绍作为首家云上靶场,基于平行仿真技术的成熟应用......
  • opencv-python形态学计算
    形态学运算包括腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽运算,底帽运算7种,其中膨胀与腐蚀是最常用的两种基础形态学方法,可以用来消除噪声,元素分割和连接,形态学运算主要在图像去噪,图像分割等方面有着广泛的运用。形态学指一系列处理图像形状特征的图像处理技术,形态学的基本思想是利用一......
  • 内存溢出案例实战
    内存溢出案例实战一.JVM内存参数配置1.给项目的tomcat的catalina.sh添加配置参数cd/usr/src/tomcat-pinter/binvicatalina.sh在第二行添加以下配置:JAVA_OPTS="-Xms512m-Xmx512m-Xmn256m-Xss1024k-XX:MetaspaceSize=512m-XX:MaxMetaspaceSize=512m-XX:+UseConcMarkSweepGC......
  • SkyWalking入门与实战
    SkyWalking部署一、基础介绍1.1概念SkyWalking是一个国产的开源框架,2015年由吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,......
  • 响应式编程实战(12)-12
    1前言无论是传统软件还是互联网应用,对于任何一个系统而言,数据的存储和访问都是不可缺少的。而数据访问层的构建可能会涉及多种不同形式的数据存储媒介,包括传统的关系型数据库,也包含各种NoSQL。今天这一讲我们先讨论响应式数据访问的模型,以及Spring框架所提供的支持。本文先引出......
  • opencv-python图像处理模块(一)
    本章节主要记录了图像颜色空间转换(着重讲述了hsv空间和对应的一个roi颜色提取实验);图形的基本绘制,包括绘制直线,矩形,圆和椭圆,还有中英文文字绘制;利用鼠标和键盘控制绘制图形,在图像上面显示某一点的坐标和对应的rgb像素值或者hsv值;以及在图片合适的位置添加logo水印。1图像颜色空间......
  • Ubuntu12.04 交叉编译 opencv-2.4.11过程
    1.Ubuntu换源可换源有很多,不过要下载12.04版的,好像不多。1.1先备份源sudocp/etc/apt/sources.list/etc/apt/sources.list.backup1.2由于12.04不受支持了,12.04相关的这些包的资源被移到了old-releases.ubuntu.com域名下:sudogedit/etc/apt/sources.list将下面内容插入......
  • Anaconda使用conda安装opencv的正确命令
    很多教程是使用pip安装opencv的,执行的命令是:pipinstallopencv-python 但是我们的环境是Anaconda,使用conda安装opencv的命令是:condainstall-cconda-forgeopencv 参考资料:https://anaconda.org/conda-forge/opencvTRANSLATEwithxEnglishArabic......
  • python3使用pip安装wordcloud报错error: Microsoft Visual C++ 14.0 or greater is re
    背景:使用的是Anaconda集成环境,python版本是:3.10,安装wordcloud包,使用的命令是:pipinstallwordcloud,出现报错:error:MicrosoftVisualC++14.0orgreaterisrequired.Getitwith"MicrosoftC++BuildTools":https://visualstudio.microsoft.com/visual-cpp-build-tools/......
  • 【项目实战】十分钟学习完 Spring Boot 拦截器
    ......