opencv创建图像,图像像素值处理、生成单通道图像和生成tif图像方法的整理
就是做个小笔记,后面要查方便
1、创建设定尺寸图象
import numpy as np
"""h,w,c分别代表图像的高、宽和通道数"""
img = np.zeros((h,w,c),dtype = 'uint8')#全为0的图
img = np.zeros((h,w,c),dtype = 'uint8')#全为1的图
"""图像复制"""
img_x= img.copy()
"""查看图像尺寸等信息"""
img.shape
(img.shape[0],img.shape[1],img.shape[2])
img.size
"""通道分离,拆分通道 """
b, g, r = cv2.split(img)
"""合并通道"""
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
2、图像像素值处理
"""像素值为0的像素个数"""
len(img[img == 0])
"""某个通道上"""
img[img[:,:,0] == 0]
img[img[:,:,1] == 0]
"""某个点上的像素值"""
xx = img[h1,w1,c1]#像素坐标+通道
"""该区域设置为白色 ,y表示行的范围,x表示列的范围"""
img[y1:y2, x1:x2]=[255,255,255]
img[100:200, 150:250] = [255,255,255]
"""修改像素 """
img[88,142] = [255, 255, 255]
"""分别获取 BGR通道像素"""
blue = img[88,142,0]
3、保存为单通道图像
import cv2
"""三通道bgr转单通道gray"""
img=cv2.imread('breast_img1.png',cv2.IMREAD_GRAYSCALE)
cv2.imwrite('one.png',img)
"""直接获取某通道数据进行保存"""
cv2.imwrite(save_path,img[:,:,0])
4、关于cv2.imwrite()和cv2.imread()
"""cv.imread后加上-1即可,表示按照图片原有格式进行读取如果没有加上-1图片会被自动转换为三通道图片"""
实验验证过,我以png格式保存了(imwrite)单通道的图像,用imread()读取保存的图片发现变成三通道了
用法:
cv2.imread(jpgfile_path,-1)
这样读出来就跟保存时的一致了
retval = imread(filename[, flags])
retval = imread(filename[, flags])
filename表示需要载入的图片路径名,其支持 Windows位图、JPEG文件、PNG图片、便携文件格式、Sun rasters光栅文件、TIFF文件、HDR文件等。
flags为 int类型,表示载入标识,它指定一个加载图像的颜色类型,默认值为 1。其中 cv2.IMREAD_UNCHANGED表示读入完整图像或图像不可变,包括 alpha通道;cv2.IMREAD_GRAYSCALE表示读入灰度图像;cv2.IMREAD_COLOR表示读入彩色图像,默认参数,忽略 alpha通道。
retval = imwrite(filename, img[, params])
filename表示要保存的路径及文件名
img表示图像矩阵
params表示特定格式保存的参数编码,默认值为空。对于 JPEG图片,该参数(cv2.IMWRITE_JPEG_QUALITY)表示图像的质量,用 0-100的整数表示,默认值为 95。对于 PNG图片,该参数(cv2.IMWRITE_PNG_COMPRESSION)表示的是压缩级别,从 0到 9,压缩级别越高,图像尺寸越小,默认级别为 3。对于 PPM、PGM 、 PBM 图片 ,该参数表示 一个二进制格式的标志(cv2.IMWRITE_PXM_BINARY)[2]。注意,该类型为 Long,必须转换成 int。
5、生成单波段tif图像:
实践总结,便于后续查阅。主要目标是用于生成tif图像,并让处理效果显示在tif图像上。
主要思路:
①根据原始tif图像的相关信息创建一张新的tif,含投影坐标系,经纬度等
②cv方法创建一张图像,本质是数字矩阵,用于操作像素值
③把cv图像的数值赋给tif图像,根据函数配置等生成
import numpy as np
import os
import sys
from osgeo import gdal
import cv2tif_out_path = './xxx/'
"""如果坐标系信息是继承自原有tif,假设通过一个读取函数gadl_info获取"""
img_width, img_height, img_nbands, img_proj,img_coord,dataset = gdal_info(image_file)
basename = os.path.basename(image_file)[:-4]#获取原图像的名称
tif_pre0 = np.zeros((img_height,img_width,3),dtype = 'uint8')
driver = gdal.GetDriverByName("GTiff")
tif_out_name = tif_out_path + basename + '.tif'
tif_pre = driver.Create(tif_out_name,img_width,img_height,1,gdal.GDT_Byte)
"""上面的“1”表示单波段,gdal.GDT_Byte是tif图像的8位像素深度"""
tif_pre.SetProjection(img_proj)
tif_pre.SetGeoTransform(img_coord)
"""上面两个是投影坐标系继承和坐标继承,左上角坐标值,如果不是继承,发生变化要重新计算"""
cv2.fillPoly(tif_pre0,[area1,area2],(255,255,255))
"""假如对某张cv图像进行区域的像素值填充操作,要把操作效果生成在tif图像上,如下"""
tif_pre.GetRasterBand(1).WriteArray(tif_pre0[:,:,-1])
del tif_pre
如果是生成多波段tif图像,就是通道上读取的数值分顺序写入
"""加入要生成tif波段数为n"""
tif_pre = driver.Create(tif_out_name,img_width,img_height,n,gdal.GDT_Byte)
tif_pre0 = np.zeros((img_height,img_width,3),dtype = 'uint8')
"""如果得到的数字矩阵维度是3,那么按通道写入,显然可以得到波段数n为3的tif图像"""
for i in range(3):tif_pre.GetRasterBand(i+1).WriteArray(tif_pre0[:,:,i])
del tif_pre
opencv创建图像,图像像素值处理、生成单通道图像和生成tif图像方法的整理相关推荐
- c语言鼠标怎么获取像素,OpenCV获取鼠标左键点击位置图像的像素值
本文实现功能:利用opencv获取鼠标左键点击位置图像的像素值(RGB像) vs2015+opencv3.1 #include #include using namespace std; using ...
- java读取tiff图像的像素值
注意:读取tiff图像的像素值,并非rgb,这是GIS方向的同学应当明晓的事情. 由于本人之前糊里糊涂的将tiff图像的rgb值作为了像素值来读取,白折腾很久很久.希望这篇文章能够为正处于此时期的童鞋 ...
- OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)
OpenCV 学习笔记 day13 像素值统计 函数 minMaxLoc(); 最大值最小值统计 meanStdDev();平均值和标准方差统计 代码 day13 像素值统计 函数 minMaxLoc ...
- cv mat 灰度值和_访问OpenCV中灰度图像的像素值
我只是想让我的概念清楚 - 访问cv :: Mat的所有矩阵元素意味着我实际上访问图像的所有像素值(灰度 - 1通道和颜色 - 3通道)? 就像我的代码打印加载的1通道图像的灰度矩阵的值和类型CV_3 ...
- opencv将Mat读入的图像的像素值打印在控制台上
//将Mat读入的图像像素值打印在控制台上,这里的Img为单通道 方法一:cv::Mat Img; IplImage *src;src=&IplImage(Img);for(int i=0;i ...
- itk调整图像的像素值范围
1. 前言 比如原来是−1023−2034-1023-2034−1023−2034,现在需要调整到0−2550-2550−255 2. 代码 2.1 definition.h #pragma once ...
- C# 读取bmp图像所有像素值
将Bitmap数据转为byte[]数据,且每个数据代表像素值 Bitmap bmp = new Bitmap(Image.FromFile(path)); // 加载图像 private byte[] ...
- OpenCV 数组存储图片像素值,便于后期图像处理
刚开始接触到OpenCV,本身是想学借助OpenCV的库来进行图像处理学习的,后来发现OpenCV将所有的东西都集成起来了,对于打算学习图像处理来说这样反而不是什么好事: 在我看来,图像处理基本基于对 ...
- cv mat 灰度值和_c++ 访问OpenCV中灰度图像的像素值
您正在访问矩阵的元素,您也正在访问图像本身.在您的代码中,执行此操作后: cv::Mat img = cv::imread("lenna.png"); 矩阵img代表图像lenna ...
最新文章
- BestCoder-Round#38
- 【推荐系统】深入理解YouTube推荐系统算法
- WCF 动态调用(1)
- C# 连接MySQL错误给定关键字不在字典中”,下载最新mysql.dll文件即可
- JS调用打印机打印Web页面
- pythonjava app切出后无网络连接_写了一个java的Server 用python的client访问却访问不通问题。...
- [1]elasticsearch源码编译
- TDD---测试驱动开发(1)
- 《Thumbs up? Sentiment Classification using Machine Learning Techniques》笔记
- mysql拼接字符串
- matlab对多项式求导的命令,matlab多项式求导
- PDF文件太大,如何将它压缩得更小一点?
- 动态IP和静态IP区别,别傻傻分不清楚!
- 【吹水阁】为什么微信红包单次上限200,不限制次数?——微信红包、转账支付宝转账
- MATLAB中findpeaks函数使用
- 为测试者布道,腾讯互娱总监魏学峰分享手游研测干货
- 写一个能火的游戏视频脚本
- centos7.X系统初始化脚本
- 基于Hbase和SpringBoot的分布式HOS文件存储系统
- OOP和POP的区别
热门文章
- MATLAB Jacobi迭代法求解
- c++实现天干地支纪年法
- CSR8670/8675 发射(TX SOURCE)一拖二 编码 格式APTX APTXLL APTXHD SBC
- 【FAQ】集成分析服务的常见问题及解决方案
- QQ影音文件无法渲染
- 解决方案:关于C2039,XXX不是XXX的成员的奇怪报错
- java iplimage 头文件_JavaCV – 为什么IplImage.createFrom(image)不再存在?
- CGAL 二维三角剖分
- web蓝桥杯第三期模拟赛
- tp6生成带图二维码(大解析)