opencv之图像基本操作

news/2025/3/11 15:15:13/文章来源:https://www.cnblogs.com/Alaso687/p/18765103

了解 通道(channels)

一张彩色图片一般由三个通道组成

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{Mat rsv;rsv = imread("C:/Users/Alaso/Desktop/1.jpg");int channels1 = rsv.channels();cout << channels1 << "\n";return 0;
}


了解掩膜操作(AKA 抠图操作)

原理:

掩膜图像就是二进制图像,然后再用原图与掩膜图像进行与运算,最终得到截图

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{Mat src,dd;src = imread("C:/Users/Alaso/Desktop/1.jpg");if (!src.data){cout << "NO Entry" << "\n";return -1;}//namedWindow("Input image",CV_WINDOW_AUTOSIZE);imshow("image", src);dd.create(src.size(),src.type());int iHeight = src.rows;int iwitdth = src.cols;int iChannels = src.channels();for (int i = 0; i < iHeight; i++){for (int j = 0; j < iwitdth; j++){if (iChannels == 1){int iGray = src.at<uchar>(i, j);dd.at<uchar>(i, j) = 255 - iGray;}else{int BB = src.at<Vec3b>(i, j)[0];int GG = src.at<Vec3b>(i, j)[1];int RR = src.at<Vec3b>(i, j)[2];dd.at<Vec3b>(i, j)[0] = 255 - BB;dd.at<Vec3b>(i, j)[0] = 255 - GG;dd.at<Vec3b>(i, j)[0] = 255 - RR;}}}namedWindow("测试输出");imshow("测试输出", dd);waitKey(0);return 0;
}


Mat输入输出矩阵

先零帧起手来一个矩阵
PS:如果矩阵的数据类型不是 CV_8U(即无符号8位整数),imshow 可能无法正确显示内容

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{Mat rsv = (Mat_<int>(3,3)<< 1,2,3,4,5,6,7,8,9);Mat dd = (Mat_<int>(3,3) << 1, 1, 1, 1,1,1,1,1,1);Mat ll = rsv + dd;cout << ll << "\n";ll.convertTo(ll,CV_8U);waitKey(0);return 0;
}

常见图形玩法

提要点:点其实就是一个圆心

Point p(3, 4);
cout << p.x << " " << p.y<<"\n";

矩形

提要点:矩形的参数可以是 1.两点 2.一个点+宽和高(point(x,y),width,height)

Rect r1(1, 2, 5, 8);//注意这个前面两个参数是左上角坐标,后面两个参数表示宽和高
cout << r1.x << " " << r1.y << " " << r1.width << " " << r1.height;


通道分离玩法

提要点:若需要将图片大小缩放,需要用resize()函数处理

#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{Mat src;src = imread("C:/Users/Alaso/Desktop/12.png");if (src.empty()){cout << "No entry" << "\n";return -1;}Mat tiaozhenghoudaxiao;resize(src, tiaozhenghoudaxiao, Size(), 0.5, 0.5, INTER_LINEAR);vector<Mat> dddd;split(tiaozhenghoudaxiao,dddd);Mat BB = dddd.at(0);Mat GG = dddd.at(1);Mat RR = dddd.at(2);imshow("红色", BB);imshow("绿色", GG);imshow("蓝色", RR);waitKey(0);return 0;
}

颜色转换玩法

#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{Mat src;src = imread("C:/Users/Alaso/Desktop/12.png");if (src.empty()){cout << "No entry" << "\n";return -1;}Mat tiaozhenghoudaxiao,dddd1,dddd2,dddd3;resize(src, tiaozhenghoudaxiao, Size(), 0.5, 0.5, INTER_LINEAR);cvtColor(tiaozhenghoudaxiao,dddd1,COLOR_BGR2GRAY);cvtColor(tiaozhenghoudaxiao, dddd2, COLOR_BGR2HSV);cvtColor(tiaozhenghoudaxiao, dddd3, COLOR_BGR2HLS);imshow("灰度图", dddd1);imshow("HSV图", dddd2);imshow("HLS图", dddd3);waitKey(0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897282.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLServer 死锁排查

适用于2012及以上版本一、创建扩展事件会话 CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.event_file(SET filename=NDeadlock_Monitor.xel) WITH (STARTUP_STATE=ON); GO ALTER EVENT SESSION [Deadloc…

Eureka服务注册发现源码流程简析

一: 服务的注册客户端通过执行InstanceInfoReplicator#run()调用DiscoveryClient#register()发送http请求进行注册 InstanceInfoReplicator 是同于更新同步当前服务到服务端的任务实现 //A task for updating and replicating the local instanceinfo to the remote server.//…

高等数学笔记

唉...本蒟蒻也是要考研了, 目前目标是深圳大学, 想研究的方向偏算法多一点, 深度学习强化学习什么的, 我会尽最大努力了 9 做到一个新的问题,想起与过去某个问题类似。发现在解答中,对此类问题,以及工具和方法的理解是存在缺陷的,或者发现理解不够深刻。于是通过解决新的…

Scatter(A Distance-Guided Fuzzing For Heap-layout)

SCATTER Abstract 利用堆利用的方法为将受害者的chunk放在可以溢出的chunk之后。SCATTER使能够以无原始的方式以普通purpose程序中的堆溢出产生可剥削的堆布局。它先使用静态分析和动态检测来计算潜在的堆利用布局,然后设计由新操纵距离为指导的fuzz,该距离衡量了在堆布局空间…

使用 Pixi.js 插件实现探险者小游戏(二)

使用 Pixi.js 插件实现探险者小游戏(一)中我们学习了如何创建精灵图,这节我们要让精灵图动起来。 精灵图布局 游戏画面如下图所示,我们要生成一个围墙,探险者、恶魔、宝物都在这个围墙里面。探险者可以上下左右移动,恶魔只能上下移动,宝物是不动的。探险者与宝物被恶魔群…

Docker:CentOS 7 离线安装 docker-ce

0. 检查卸载已有docker 查看是否安装 docker yum list installed | grep docker 卸载docker yum remove docker docker-common container-selinux docker-selinux docker-engineyum remove -y docker-* 1. 下载安装包 要下载docker-18.06.x-ce版本,否则有些不支持 k8s。。请看…

dp泄露攻击

题目: from Crypto.Util.number import *flag = bNSSCTF{******} + b1*100p = getPrime(512) q = getPrime(512)n = p*q e = 65537 d = inverse(e, (p-1)*(q-1))dp = d % (p-1)m = bytes_to_long(flag)c = pow(m, e, n)print(fn = {n}) print(fc = {c}) print(fdp = {dp}) n = …

dpdq泄露攻击-没e_

题目: from Crypto.Util.number import * from gmpy2 import * from secret import flagp = getPrime(1024) q = getPrime(1024) d = inverse(65537,(p-1)*(q-1)) dp = d%(p-1) dq = d%(q-1) print(fc={pow(bytes_to_long(flag),e,p*q)}) print(fp={p}) print(fq={q}) print(fd…

Linux安装Ollama服务

背景 Ollama官方提供了一键式安装脚本,但因国内网络问题,效率太低,所以探索更为快捷方式。 我的系统信息如下 root@yan:/mnt/d/data# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Code…

C学习笔记-311

多维数组和指针 为什么需要数组为了解决大量同类型数据的存储和使用问题。 用数组可以模拟现实世界。Int a[25]:一维数组,可以当做一个线性结构。 Int a[8][6]:可以当做一个平面,意思是8行6列。有48个元素。 Int a[3][4][5]:可以当做一个三维立体。 Int a[3][4][5][6]:可…

e与(p-1)或(q-1)均不互素

题目: from Crypto.Util.number import bytes_to_long from secret import flage = 0x14 p = 7330895897249035860738209657929637460767893905398244379628076799548083100726568174238286139385106848645676643457511649442694896479642275193079806880680590593771233914993…

e与(q-1)互素,但用上题方法求不出

题目: c = 2485360255306619684345131431867350432205477625621366642887752720125176463993839766742234027524 n = 0x2CAA9C09DC1061E507E5B7F39DDE3455FCFE127A2C69B621C83FD9D3D3EAA3AAC42147CD7188C53 e = 3解题思路:分解n得到分析得到e只与(r-1)互素,但用上题方法无法解出…