圖片畫素值得獲取和修改
在之前的學習中,已經知道了如何獲取每個影象的行畫素陣列,但是在修改影象畫素值時並不方便,特別是多通道影象,很容易弄錯,今天的學習,讓我知道了更加直觀的方式修改影象畫素。
主要涉及下面兩個函式:
(1)對於單通道影象(灰度圖):Mat物件.at<uchar>(x,y);//x,y是影象上的座標,返回一個uchar值
(2)對於三通道影象(BGR影象):Mat物件.at<Vec3b>(x,y);//x,y是影象上的座標,返回一個長度為3的uchar陣列,分別代表BGR通道的畫素值。Vec3b不是固定的,有時也會使用Vec3f,b和f的區別在於b代表的是uchar型別,f代表float型別。
順帶提一個函式:Mat物件.convertTo(目標Mat物件,型別);//型別有很多,比如CV_32F,表示影象資料型別變成32位float型,又比如CV_8U,表示型別變為8位uchar型別。
演示程式碼如下:
結果如下:#include<opencv2\opencv.hpp> #include<iostream> #include<math.h> using namespace std; using namespace cv; int main() { Mat src = imread("1.jpg", 1); Mat dst1 = Mat(src.size(), src.type()); cvtColor(src, dst1, CV_BGR2GRAY); namedWindow("灰度原圖"); imshow("灰度原圖", dst1); namedWindow("灰度影象畫素操作"); for (int row = 0; row < dst1.rows; row++) { for (int col = 0; col < dst1.cols; col++) { int pix = dst1.at<uchar>(row, col);//獲取原影象該點的畫素值 dst1.at<uchar>(row, col) = 255 - pix; } } imshow("灰度影象畫素操作", dst1); namedWindow("BGR原圖"); imshow("BGR原圖", src); Mat dst2 = src.clone(); namedWindow("BGR影象畫素操作"); for (int row = 0; row < dst2.rows ; row++) { for (int col = 0; col < dst2.cols ; col++) { Vec3b pix = dst2.at<Vec3b>(row, col);//獲取3通道的資料按照BGR順序建立一個數組,叫pix,Vec3b的意思是,三通道資料,資料型別uchar,在做其他操作時也可能用Vec3f,資料型別為float int b = pix[0]; int g = pix[1]; int r = pix[2]; dst2.at<Vec3b>(row, col)[0] = 255 - b; dst2.at<Vec3b>(row, col)[1] = 255 - g; dst2.at<Vec3b>(row, col)[2] = 255 - r; } } imshow("BGR影象畫素操作", dst2); waitKey(0); return 0; }
相關推薦
圖片畫素值得獲取和修改
在之前的學習中,已經知道了如何獲取每個影象的行畫素陣列,但是在修改影象畫素值時並不方便,特別是多通道影象,很容易弄錯,今天的學習,讓我知道了更加直觀的方式修改影象畫素。 主要涉及下面兩個函式: (1)對於單通道影象(灰度圖):Mat物件.at<uchar>(x,
OpenCV修改圖片畫素值增加、減少
程式碼位置:11-ImagePixelsBeChange.py import cv2 import numpy as np img = cv2.imread('./res/mini.jpeg') cv2.imshow('img', img) num = np.zeros(img.sh
unity裡面獲取圖片畫素座標問題
為了知道unity裡,texture.GetPixels()裡每個畫素的顏色到底是怎麼樣分佈的,我們進行了一個測試。上圖是一個4*4的貼圖,ps和unity裡顯示都是這樣。 public class testCol:MonoBehaviour {
opencv——批量修改圖片畫素大小
#include "stdafx.h" #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; Mat dealimage; int num = 0
利用canvas獲取圖片畫素值
利用canvas的getImageData方法可以讀取畫布的某位置畫素值。 1.首先建立一個canvas物件, var canvas = document.createElement(‘canvas’); 2.獲取它的2d上下文。 var context
png和bmp圖片畫素讀取(linux)
查詢當前目錄下的png和bmp圖片,將其畫素點讀取出來壓縮排theme.bin中,並將圖片的其他資訊如寬高壓縮前後大小和在theme.bin中的偏移位置儲存在bmpaddr.h中,方便在其他程式碼中讀取圖片畫素資訊。 main.c #include <
iOS小Demo之獲取圖片畫素資料
#define R(x) ( Mask8(x) ) #define G(x) ( Mask8(x >> 8 ) ) #define B(x) ( Mask8(x >> 16) ) -(void)getImagePixel { UIIm
Unity3D中截圖並修改圖片畫素重新儲存至本地
第一次開始寫部落格,想把自己在平時遇到的一點小問題記錄下來,也方便其他人蔘考 最近在用Unity3D做一個綠幕摳像的應用(囧一個,不要問我為什麼用unity3D做),過程中需要對圖片進行一些處理。 首先你需要一個 System.Drawing.dll。對image進行操作,
android 通過修改圖片畫素實現CircleImageView
CircleImageView實現方法有很多種,各有優缺點,因此需要按照不同的場景使用。我們今天使用修改圖片畫素的方法實現Circ
redis入門(3)redis的配置獲取和修改
配置 daemonize rip require str 無限 文件的操作 idf master 一、Redis 配置 Redis 的配置文件位於 Redis 安裝目錄下,文件名為 redis.conf。 你可以通過 CONFIG 命令查看或設置配置項。 二、使用配置 1、
影象畫素點讀取和賦值
//取IplImage影象畫素值 int main() { IplImage* src = cvLoad("filename",0); //-1預設讀取原通道,0 灰度圖,1彩色圖 if(src!=0) &nb
JS和Jquery獲取和修改label的值
獲取值: label標籤在JS和Jquery中使用不能像其他標籤一樣用value獲取它的值: var label=document.getElementById("id");var value=label.value;var value=$("#id").val();可以這樣:JS: var label
獲取和修改計算機螢幕解析度 VC
//獲取解析度 m_nWiondwMetricsX = ::GetSystemMetrics(SM_CXSCREEN); m_nWiondwMetricsY
opencv 訪問彩色圖片畫素(指標方法)
#include "stdafx.h" #include <cv.h> #include <highgui.h> #include <opencv2/imgproc
jQuery和js一些標籤屬性的獲取和修改方法以及區別
因為自己總是在jQuery和js寫function的時候,總是把兩者之間混淆,一直想總結以下這2這區別和使用的方式,所以就查了下,再加上了自己平時記錄的,總結下,為了下次自己再次混淆的時候可以直接看自己的部落格查詢,同時也給大家提供便利,以下有轉載的部分,我已經提供了出處,
python統一圖片畫素
#提取目錄下所有圖片,更改尺寸後儲存到另一目錄 from PIL import Image import os.path import glob def convertjpg(file,outdir,width=1000,height=1000): img=Image.open(file)
VS2015控制檯中獲取和修改當前字型大小(2-2)
2.2 GetConsoleFontSize()函式 GetConsoleFontSize()函式的作用是獲取指定控制檯輸出視窗字型的尺寸。 2.2.1 函式介紹 GetConsoleFontSize()函式的格式為 COORD WINAPI GetConsoleFontSize
響應式佈局對圖片畫素的解決
響應式圖片和多媒體是響應式網站的三大基礎重點之一。表面上看這是一件非常簡單的事情,只要把圖片元素的高、寬屬性值都移去,然後設定max-width屬性為100%即可。不過在這麼做之前還需要考慮很多情況。·設計響應式圖片的難點去年Filament Group在重構Boston G
opencv讀取彩色/灰度圖片畫素值並存儲在本地檔案中c++程式碼例項及執行結果
c++程式碼彩色圖片#include<opencv2/opencv.hpp> #include<fstream> using namespace std; using namespace cv; int main(int argc, char* ar
opencv點選滑鼠讀取圖片畫素c++程式碼
程式碼#include<opencv2/opencv.hpp> using namespace std; void onMouse(int event, int x, int y, int flags, void *param) { cv::Mat *im =