就是做个小笔记,后面要查方便

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图像方法的整理相关推荐

  1. c语言鼠标怎么获取像素,OpenCV获取鼠标左键点击位置图像的像素值

    本文实现功能:利用opencv获取鼠标左键点击位置图像的像素值(RGB像) vs2015+opencv3.1 #include #include using namespace std; using ...

  2. java读取tiff图像的像素值

    注意:读取tiff图像的像素值,并非rgb,这是GIS方向的同学应当明晓的事情. 由于本人之前糊里糊涂的将tiff图像的rgb值作为了像素值来读取,白折腾很久很久.希望这篇文章能够为正处于此时期的童鞋 ...

  3. OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)

    OpenCV 学习笔记 day13 像素值统计 函数 minMaxLoc(); 最大值最小值统计 meanStdDev();平均值和标准方差统计 代码 day13 像素值统计 函数 minMaxLoc ...

  4. cv mat 灰度值和_访问OpenCV中灰度图像的像素值

    我只是想让我的概念清楚 - 访问cv :: Mat的所有矩阵元素意味着我实际上访问图像的所有像素值(灰度 - 1通道和颜色 - 3通道)? 就像我的代码打印加载的1通道图像的灰度矩阵的值和类型CV_3 ...

  5. opencv将Mat读入的图像的像素值打印在控制台上

    //将Mat读入的图像像素值打印在控制台上,这里的Img为单通道 方法一:cv::Mat Img; IplImage *src;src=&IplImage(Img);for(int i=0;i ...

  6. itk调整图像的像素值范围

    1. 前言 比如原来是−1023−2034-1023-2034−1023−2034,现在需要调整到0−2550-2550−255 2. 代码 2.1 definition.h #pragma once ...

  7. C# 读取bmp图像所有像素值

    将Bitmap数据转为byte[]数据,且每个数据代表像素值 Bitmap bmp = new Bitmap(Image.FromFile(path)); // 加载图像 private byte[] ...

  8. OpenCV 数组存储图片像素值,便于后期图像处理

    刚开始接触到OpenCV,本身是想学借助OpenCV的库来进行图像处理学习的,后来发现OpenCV将所有的东西都集成起来了,对于打算学习图像处理来说这样反而不是什么好事: 在我看来,图像处理基本基于对 ...

  9. cv mat 灰度值和_c++ 访问OpenCV中灰度图像的像素值

    您正在访问矩阵的元素,您也正在访问图像本身.在您的代码中,执行此操作后: cv::Mat img = cv::imread("lenna.png"); 矩阵img代表图像lenna ...

最新文章

  1. BestCoder-Round#38
  2. 【推荐系统】深入理解YouTube推荐系统算法
  3. WCF 动态调用(1)
  4. C# 连接MySQL错误给定关键字不在字典中”,下载最新mysql.dll文件即可
  5. JS调用打印机打印Web页面
  6. pythonjava app切出后无网络连接_写了一个java的Server 用python的client访问却访问不通问题。...
  7. [1]elasticsearch源码编译
  8. TDD---测试驱动开发(1)
  9. 《Thumbs up? Sentiment Classification using Machine Learning Techniques》笔记
  10. mysql拼接字符串
  11. matlab对多项式求导的命令,matlab多项式求导
  12. PDF文件太大,如何将它压缩得更小一点?
  13. 动态IP和静态IP区别,别傻傻分不清楚!
  14. 【吹水阁】为什么微信红包单次上限200,不限制次数?——微信红包、转账支付宝转账
  15. MATLAB中findpeaks函数使用
  16. 为测试者布道,腾讯互娱总监魏学峰分享手游研测干货
  17. 写一个能火的游戏视频脚本
  18. centos7.X系统初始化脚本
  19. 基于Hbase和SpringBoot的分布式HOS文件存储系统
  20. OOP和POP的区别

热门文章

  1. MATLAB Jacobi迭代法求解
  2. c++实现天干地支纪年法
  3. CSR8670/8675 发射(TX SOURCE)一拖二 编码 格式APTX APTXLL APTXHD SBC
  4. 【FAQ】集成分析服务的常见问题及解决方案
  5. QQ影音文件无法渲染
  6. 解决方案:关于C2039,XXX不是XXX的成员的奇怪报错
  7. java iplimage 头文件_JavaCV – 为什么IplImage.createFrom(image)不再存在?
  8. CGAL 二维三角剖分
  9. web蓝桥杯第三期模拟赛
  10. tp6生成带图二维码(大解析)