个人笔记 长期更新

#### 创建一个图片
import cv2 # Not actually necessary if you just want to create an image.
import matplotlib.pyplot as plt #jupyter notebook 用cv2 show img有问题
import numpy as np
height=300
width=300
blank_image = np.zeros((height,width,3), np.uint8)
print(blank_image.shape)
#blank_image[:,0:width//2] = (128,128,128) # (B, G, R)
#blank_image[:,width//2:width] = (128,128,128)
white_image = blank_image.copy()
white_image[...]=(255,255,255)
plt.imshow(white_image)
plt.show() gray_image = blank_image.copy()
gray_image[...]=(128,128,128)
plt.imshow(gray_image)
plt.show()
# white_in_center_img = blank_image.copy()
white_in_center_img[100:200,100:200,:]=(128,128,128)
plt.imshow(white_in_center_img)
plt.show()

读取一个图片

import cv2
img = cv2.imread("/nfsserver/test.jpg")
print(img.shape)

输出(640, 480, 3). 顺序为HWC,BGR

opencv里内存里的存储顺序

https://stackoverflow.com/questions/37040787/opencv-in-memory-mat-representation



举个具体的例子,比如8 x 8的彩色图片。像素坐标从(0,0)到(7,7),每个像素有r,g,b三个值。

存储顺序为(0,0,b),(0,0,g),(0,0,r),(0,1,b),(0,1,g),(0,1,r)......(7,7,b),(7,7,g),(7,7,r)

所以第i行,第j列,第c个channel对应的index即为 i x j x 3 + j x 3 + c.

resize

import cv2
import matplotlib.pyplot as plt
import numpy as np
height=3
width=5
blank_image = np.zeros((height,width,3), np.uint8)
blank_image[1:2,3:4,]=(255,0,0)
plt.imshow(blank_image)
plt.show() cv2.imwrite('/home/su/Desktop/test.jpg',blank_image) blank_image = cv2.resize(blank_image, (416, 416), interpolation=cv2.INTER_CUBIC)
cv2.imwrite('/home/su/Desktop/test2.jpg',blank_image)

opencv mat type

在用printf("mat.type")打印的时候打出来的只是一个数字,不好观察具体的类型,可以参见下表

+--------+----+----+----+----+------+------+------+------+

| | C1 | C2 | C3 | C4 | C(5) | C(6) | C(7) | C(8) |

+--------+----+----+----+----+------+------+------+------+

| CV_8U | 0 | 8 | 16 | 24 | 32 | 40 | 48 | 56 |

| CV_8S | 1 | 9 | 17 | 25 | 33 | 41 | 49 | 57 |

| CV_16U | 2 | 10 | 18 | 26 | 34 | 42 | 50 | 58 |

| CV_16S | 3 | 11 | 19 | 27 | 35 | 43 | 51 | 59 |

| CV_32S | 4 | 12 | 20 | 28 | 36 | 44 | 52 | 60 |

| CV_32F | 5 | 13 | 21 | 29 | 37 | 45 | 53 | 61 |

| CV_64F | 6 | 14 | 22 | 30 | 38 | 46 | 54 | 62 |

+--------+----+----+----+----+------+------+------+------+

打印类型的参考代码:

string type2str(int type) {
string r; uchar depth = type & CV_MAT_DEPTH_MASK;
uchar chans = 1 + (type >> CV_CN_SHIFT); switch ( depth ) {
case CV_8U: r = "8U"; break;
case CV_8S: r = "8S"; break;
case CV_16U: r = "16U"; break;
case CV_16S: r = "16S"; break;
case CV_32S: r = "32S"; break;
case CV_32F: r = "32F"; break;
case CV_64F: r = "64F"; break;
default: r = "User"; break;
} r += "C";
r += (chans+'0'); return r;
}

cv:Mat to vector

Mat to array

uchar * arr = image.isContinuous()? image.data: image.clone().data;
uint length = image.total()*image.channels();

Mat to vector

cv::Mat flat = image.reshape(1, image.total()*image.channels());
std::vector<uchar> vec = image.isContinuous()? flat : flat.clone();

opencv代码片段合集的更多相关文章

  1. Javascript 语言精粹 代码片段合集

    Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...

  2. 常用torch代码片段合集

    PyTorch常用代码段整理合集 本文代码基于 PyTorch 1.0 版本,需要用到以下包 import collections import os import shutil import tqd ...

  3. numpy代码片段合集

    生成shape为(num_examples, num_inputs),符合0-1分布的数据. np.random.normal(0, 1, (num_examples, num_inputs))

  4. 天气类API调用的代码示例合集:全国天气预报、实时空气质量数据查询、PM2.5空气质量指数等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 全国天气预报:数据来自国家气象局,可根据地名.经纬度GPS.IP查 ...

  5. 位置信息类API调用的代码示例合集:中国省市区查询、经纬度地址转换、POI检索等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 中国省市区查询:2017最新中国省市区地址 经纬度地址转换:经纬度 ...

  6. 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 短信服务:通知类和验证码短信,全国三网合一通道,5秒内到达,费用低 ...

  7. 生活常用类API调用的代码示例合集:邮编查询、今日热门新闻查询、区号查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 邮编查询:通过邮编查询地名:通过地名查询邮编 今日热门新闻查询:提 ...

  8. 开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  9. 出行服务类API调用的代码示例合集:长途汽车查询、车型大全、火车票查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 长途汽车查询:全国主要城市的长途汽车时刻查询,汽车站查询 车型大全 ...

随机推荐

  1. Elasticsearch 6.x版本全文检索学习之倒排索引与分词、Mapping 设置

    Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. ...

  2. ElasticSearch安装中文分词器IK

    1.安装IK分词器,下载对应版本的插件,elasticsearch-analysis-ik中文分词器的开发者一直进行维护的,对应着elasticsearch的版本,所以选择好自己的版本即可.IKAna ...

  3. oracle学习笔记(十五) PL/SQL语法结构以及使用

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...

  4. 函数的防抖---js

    执行规定一段时间后执行 <input type="text" id="inp" /> <script> var oInp = docum ...

  5. Typescript基础(3)——类

    前言 今天继续typescript的学习,开始ts类的学习. 类 类的实现 在ES6中新增了类的概念.我们先看ES6中类的实现. class Person { constructor(name,age ...

  6. CVE-2019-0708-BlueKeep漏洞复现

    环境 攻击机:Kali Linux IP:192.168.0.108 靶机:Windows Sever 7 SP1 旗舰版 IP:192.168.0.109 Exploit: https://gith ...

  7. 当cell中有UItextfiled或者UITextVIew时,弹出键盘把tableview往上,但是有的cell没有移动

    cell中有UITextView时,输入文字是需要将tableView向上移,基本的做法是,注册键盘变化的通知在通知的方法中做tableVIew的位置调整, 一,一般做法 - (void)regist ...

  8. 【JavaWeb】实现二级联动菜单

    实现效果 频道信息 package demo; public class Channel { private String code; //频道编码 private String name; //频道 ...

  9. [转]JVM系列一:JVM内存组成及分配

    原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2036387.html JVM系列一:JVM内存组成及分配 java内存组成介绍:堆( ...

  10. ORA-1562 and ORA-1650 Unable to Extend Rollback Segment (Doc ID 1066542.6)

    ORA-1562 and ORA-1650 Unable to Extend Rollback Segment (Doc ID 1066542.6) APPLIES TO: Oracle Databa ...