精华内容
下载资源
问答
  • 像素进行操作,我们自然想到首先要提取像素点,上一篇文章中我们利用了Mat对象的ptr()函数可以返回一个指针类型的像素点,但是对指针进行操作似乎总是不和我们的常规,感觉有些危险。。。所以这篇文章主要用到at()...

    像素的操作

    对像素进行操作,我们自然想到首先要提取像素点,上一篇文章中我们利用了Mat对象的ptr()函数可以返回一个指针类型的像素点,但是对指针进行操作似乎总是不和我们的常规,感觉有些危险。。。所以这篇文章主要用到at()函数

    关于at():
    at<template>(i,j) 代表读取某Mat对象的 i 行 j 列像素点,且返回值可变,不牵涉指针操作。
    示例如下:

    1.对图像的像素值进行反差

    这个操作牵涉到图片的色彩空间,如果图片是三维,即rgb色彩空间,那么像素点数据类型不为uchar,而应该是Vec3b或Vec3f。(Vec3b对应 bgr的uchar类型、Vec3f对应 bgr的float类型)

    #include <opencv2\opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, char** argv) {
    	Mat src = imread("E:/images/timg.jpg");
    	if (src.empty()) {
    		cout << "could not be found" << endl;
    		return -1;
    	}
    	namedWindow("output", CV_WINDOW_AUTOSIZE);
    	imshow("output", src);
    	
    	Mat dst;
    	dst.create(src.size(), src.type()); // 用到了上一篇文章中的构造函数
    	int nc = src.channels();
    	cout << nc << endl;
    	
    	// 对src进行反差  即三维色彩空间
    	for (int row = 0; row < height; row++) {
    		for (int col = 0; col < width; col++) {
    			if (nc == 1) {
    				// 对一维色彩空间进行反差
    				int gray = src.at<uchar>(row, col); //获取像素值
    				dst.at<uchar>(row, col) = 255 - gray;
    			}
    			else if (nc == 3) {
    			// Vec3b对应 bgr的uchar类型
    			// Vec3f对象 bgr的float类型
    
    				int b = src.at<Vec3b>(row, col)[0]; 
    				int g = src.at<Vec3b>(row, col)[1];
    				int r = src.at<Vec3b>(row, col)[2];
    				dst.at<Vec3b>(row, col)[0] = 255 - b;
    				dst.at<Vec3b>(row, col)[1] = 255 - g;
    				dst.at<Vec3b>(row, col)[2] = 255 - r;
    				//dst.at<Vec3b>(row, col)[2] = 255 - r;
    			}
    			
    		}
    	}
    	imshow("output3", dst);
    	Mat m1 = Mat::zeros(src.size(),src.type());
    	// 将CV_8UC1 转换为CV_32F  即从uchar转换为float32
    	src.convertTo(m1, CV_32F);
    	imshow("output4", m1);
    	waitKey(0);
    	return 0;
    }
    

    上面写的两个for循环可不写,因为反差实质为位运算取反,可用一个api搞定。

    	//一个api搞定
    	bitwise_not(src, dst);  // 反位操作  相当于位运算
    

    2.两张图片的混合

    这里的混合方法为线性混合运算(带权值)。
    F(x,y)=alphaf(x,y)+(1alpha)g(x,y) F(x,y) = alpha * f(x, y) + ( 1 - alpha ) * g(x ,y)
    alpha属于0-1,即代表两张图混合时哪张图占的比例更大。f(x, y)、g(x ,y)分别代表src1、src2,即混合运算的两个对象,F(x,y)代表混合后生成的图片。运算对象自然是两个图片的像素值。代码如下:

    #include <opencv2\opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    // 图片的混合
    int main(int argc, char** argv) {
    	Mat src1 = imread("E:/images/0.jpg");
    	Mat src2 = imread("E:/images/1.jpg");
    	if (src1.empty() || src2.empty()) {
    		cout << "could not be found " << endl;
    		return -1;
    	}
    	namedWindow("output01", CV_WINDOW_NORMAL);
    	imshow("output01", src1);
    	namedWindow("output02", CV_WINDOW_NORMAL);
    	imshow("output02", src2);
    	Mat dst = Mat::zeros(src1.size(), src1.type());
    	double alpha = 0.5; // 代表权重
    	if (src1.cols == src2.cols && src1.rows == src2.rows && src1.type() == src2.type()) {
    		addWeighted(src1, alpha, src2, 1 - alpha, 0.0, dst) ;// 像素相加  线性混合 
    		// multiply(src1, src2, dst, 1.0); // 像素相乘
    		namedWindow("output03", CV_WINDOW_AUTOSIZE);
    		imshow("output03", dst);
    	}
    
    	waitKey(0);
    
    	return 0;
    }
    
    展开全文
  • opencv 像素数据取反

    2019-03-05 23:10:00
    获取像素指针 p2 = out_img.ptr (row); for ( int col = 0 ; col ; col++ ) { *p2 = 255 - *p1; // 取反 p2++ ; p1 ++ ; } } imshow( " in_img " , in_img); imshow( " out_img " , out_img);...
    #include<opencv2\opencv.hpp>
    #include<highgui.h>
    
    using namespace cv;
    
    
    int main(int argc, char** argv)
    {
    
        Mat in_img = imread("D:/vcprojects/images/123.jpg");
    
        Mat out_img;
        in_img.copyTo(out_img);
    
        int channels = in_img.channels();
        int rows = in_img.rows;
        int cols = in_img.cols * channels;
        if (in_img.isContinuous()) {
            cols *= rows;
            rows = 1;
        }
    
        uchar* p1;
        uchar* p2;
        for (int row = 0; row < rows; row++) {
            p1 = in_img.ptr<uchar>(row);    // 获取像素指针
            p2 = out_img.ptr<uchar>(row);
            for (int col = 0; col < cols; col++) {
                *p2 = 255 - *p1; // 取反
                p2++;
                p1++;
            }
        }
    
        imshow("in_img", in_img);
        imshow("out_img", out_img);
    
        waitKey(0);
        
        return 0;
    }

     

    转载于:https://www.cnblogs.com/hehe2014/p/10480494.html

    展开全文
  • opencv像素整体取反

    千次阅读 2017-05-04 13:23:26
    cv::Mat pimg; pimg = ~pimg;

    cv::Mat pimg;

    pimg = ~pimg;

    展开全文
  • 读写灰度图像,RGB图像的某个像素、修改像素值、图像取反(源码+API)

    1. 读写像素

    (1)读一个灰度图像的某点像素值

    Scalar intensity=img.at<uchar>(y,x);
    或者Scalar intensity =img.at<uchar>(Point(x,y))
    

    (2)读一个RGB像素点的像素值

    int b = dst.at<Vec3b>(row, col)[0];  //读取像素
    int g = dst.at<Vec3b>(row, col)[1];
    int r = dst.at<Vec3b>(row, col)[2];
    

    2. 修改像素值

    (1)灰度图像

    img.at<uchar>(y,x)=128;
    

    (2)RGB三通道图像

    dst.at<Vec3b>(row, col)[0] = newb;
    dst.at<Vec3b>(row, col)[1] = newg;
    dst.at<Vec3b>(row, col)[2] = newr;
    

    (3)空白图像赋值

    img=Scalar(0);
    

    3. Vec3b与Vec3F

    Vec3b对应的三通道的顺序是blue,green,red的uchar类型数据
    Vec3f对应三通道的float类型
    把CV_8UC1转换到CV32F1实现如下:
    src.convertTo(dst,CV_32F);

    代码演示:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char** argv) {
    	Mat src,gray_src;
    	src = imread("D:/image/test.jpg");
    	if (src.empty()) {
    		cout << "could not load image...." << endl;
    		return -1;
    	}
    	namedWindow("input", WINDOW_AUTOSIZE);
    	imshow("input", src);
    
    	cvtColor(src, gray_src, COLOR_BGR2GRAY);		//转成灰度图像
    	namedWindow("output", WINDOW_AUTOSIZE);
    	imshow("output", gray_src);
    	
    	int height_gray = gray_src.rows;
    	int width_gray = gray_src.cols;
    
    	//单通道给图像做反向操作
    	for (int row = 0; row < height_gray; row++) {
    		for (int col = 0; col < width_gray; col++) {
    			int gray = gray_src.at<uchar>(row, col);
    			gray_src.at<uchar>(row, col) = 255 - gray;
    		}
    	}
    	namedWindow("反向", WINDOW_AUTOSIZE);
    	imshow("反向", gray_src);
    
    	//三通道给图像做反向操作
    	Mat dst;
    	dst.create(src.size(), src.type());
    	int height_color = src.rows;
    	int width_color = src.cols;
    	int channels = src.channels();
    
    	for (int row = 0; row < height_color; row++) {
    		for (int col = 0; col < width_color; col++) {
    			int b = dst.at<Vec3b>(row, col)[0];  //读取像素
    			int g = dst.at<Vec3b>(row, col)[1];
    			int r = dst.at<Vec3b>(row, col)[2];
    			int newb = 255 - b;
    			int newg = 255 - g;
    			int newr = 255 - r;
    			dst.at<Vec3b>(row, col)[0] = newb;
    			dst.at<Vec3b>(row, col)[1] = newg;
    			dst.at<Vec3b>(row, col)[2] = newr;
    		}
    	}
    	
    	//三通道反向操作的API
    	bitwise_not(src, dst);
    
    
    	namedWindow("output", WINDOW_AUTOSIZE);
    	imshow("output", dst);
    
    	waitKey(0);
    	return 0;
    }
    
    展开全文
  • 图像像素取反

    千次阅读 2018-12-22 09:58:55
    1 void cvNot( const CvArr* src, ...因此,一个为0x00的8位图像将被映射到0xff,而为0x83的图像将被映射到0x7c。 #include &lt;stdio.h&gt; #include &lt;opencv2\opencv.hpp&gt; int m...
  • opencv像素取反

    2019-05-20 10:32:22
    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp>...using namespace cv;... sr...
  • 图像二取反

    2015-04-30 19:53:25
    先获取获取直方图,用到 pImageData ,nWidth , nHeight ,nWidthStep , pHistogram等参数;然后用大津法取阈值,通过阈值对图像进行二化处理,在对图像进行取反
  • 前提条件 使用工具python3.x 使用库numpy;opencv, api简介 1.cv.floodFill 对所选某一区域进行填充颜色,参数...def accessPixels(image): # 像素取反自定义函数 print(image.shape) height = image.shape[0] wid
  • image[row, col, c] = 255 - pv#像素取反,修改每个像素点每个通道灰度 cv.imshow("pixels_demo", image) def create_image(): img = np.zeros([400, 400, 3], np.uint8)#创建一个三维数组高400,宽400,...
  • # 定义像素取反函数 def inverse(image): # 逐位取反 dst = cv.bitwise_not(image) # 展示图片 cv.imshow('not pixel', dst) # 读取图片 src = cv.imread(r'C:\Users\Administrator.PC-20201106KUIO\Desktop\...
  • opencv(3)图像像素取反

    千次阅读 2019-05-12 12:55:03
    1.图像取反 import cv2 as cv # 索引是[i,j,k] 这样写的 而不是[i:j:k] 这样写的 def access_pixels(img): s = img.shape for i in range(s[0]): for j in range(s[1]): for k in range(s[2]): ...
  • opencv 两种方法实现像素取反--python

    千次阅读 2019-09-27 14:36:01
    源码: 方法一: import cv2 as cv ...# 像素取反 def get_img_info(img): height = img.shape[0] # 高 width = img.shape[1] #宽 channels = img.shape[2] #通道数 #将图像的每个像素点进行反选操作...
  • OpenCV-python基础操作之图像像素取反+显示程序运行消耗时间 代码: # 代码描述:对表示像素的数组进行操作,遍历像素进行取反,添加显示程序运行消耗的时间 # # 创建时间: 2020-09-01 # 创建人: Kenn Wu # 修改...
  • 数组方法遍历访问像素值取反2.指针方法遍历访问像素值取反3.迭代器方法遍历访问像素值取反4.结果 记录总结OpenCV中遍历访问像素值的方法。 1.数组方法遍历访问像素值取反 Mat input_image = imread("./...
  • Python对图片进行像素取反(numpy和PIL)

    千次阅读 2020-05-16 21:24:55
    变换后\color{Red}变换后变换后 from PIL import Image import numpy as np//导入库,没什么说的 im=np.array(Image.open("D:\ChromeDownload\艾米莉亚膝枕.jpg")) b=[255,255,255]-im//对im图像的RGB值取反,因为RGB...
  • 访问Mat中每个像素 方法0:.ptr和[]操作符 Mat最直接的访问方法是通过.ptr int main(int argc, char* argv[]) { Mat img = imread("E:\\11.jpg"); int nr = img.rows; // number of rows int nc = img.cols ...
  • 读写一个GRAY像素点的像素值(CV_8UC1) gray = gray_img.at&lt;uchar&gt;(row, col); 读取一个RGB图像的像素点的像素值 int b = img.at&lt;Vec3b&gt;(row, col)[0]; int...
  • opencv修改像素值

    千次阅读 2019-11-13 20:00:13
    Mat对象读取图片,用矩阵(二维数组)储存图片的像素值 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat src = imread("D:/image/1....
  • opencv--像素值的读写

    2018-11-10 19:07:08
    像素值的读写 我们需要读取某个像素值,或者设置某个像素值;在更多的时候,我们需要对整个图像里的所有像素进行遍历。OpenCV 提供了多种方法来实现图像的遍历。 at()函数 函数at()用于读取矩阵中的某个像素,或者...
  • 图像取反

    千次阅读 2018-11-04 19:54:49
    显然这是一个一对一的映射,即像素值0变为255,1变为254…254变为1,255变为0。对应的查找表为lookup[256]={255,254,…,1,0}。 代码如下: #include &lt;iostream&gt; #include "opencv2/core/core.hpp&...
  • 图像处理离不开一些基本的图像数据操作,例如获取和修改图像的基本信息,访问和修改图像像素值,图像显示,图像类型转换等等。熟练掌握这些基本操作有助于使用VTK进行图像处理的快速开发。   5.4.1图像信息...
  • 文章目录颜色空间转换 cvtColor创建新图:克隆复制与赋值像素值的访问伪彩色applyColorMapLUT查找表实现伪彩色 颜色空间转换 cvtColor 该函数的文档地址 函数原型: void cv::cvtColor(InputArray src ,OutputArray ...
  • OpenCV学习笔记-彩色图像取反

    千次阅读 2016-09-01 11:50:17
    OpenCV 图像取反:将图像变为原来图像的反色。例如,如果一副灰度图像的每个像素值由2^8=256个,假设点(i,j)出像素值为 a,则取反后的像素值为 255-a。
  • OpenCV图像取反

    千次阅读 2018-06-07 22:55:06
    所谓图像取反,就是将RGB图像的每个像素点(r, g, b),使用(255 - r, 255 - g, 255 - b)替换。对于灰度图像而言,则是将(g)使用(255 - g)替换。 如下图所示: RGB图像 RGB取反图像 灰度图像 灰度取反...
  • //maskA取反生成maskB Mat maskB = Mat::zeros(maskA.size(), CV_8UC1); for (int i = 0; i ; i++) { for (int j = 0; j ; j++) { if (maskA.at(j, i) == 0) { maskB.at(j, i) = 1; } } } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,519
精华内容 1,807
关键字:

像素值取反