1. 程式人生 > >圖片畫素值得獲取和修改

圖片畫素值得獲取和修改

在之前的學習中,已經知道了如何獲取每個影象的行畫素陣列,但是在修改影象畫素值時並不方便,特別是多通道影象,很容易弄錯,今天的學習,讓我知道了更加直觀的方式修改影象畫素。

主要涉及下面兩個函式:

(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

pngbmp圖片讀取(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

JSJquery獲取修改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

jQueryjs一些標籤屬性的獲取修改方法以及區別

因為自己總是在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 =