zoukankan      html  css  js  c++  java
  • 图像处理基本算法

    使用openCV进行图像处理,总感觉并不能真正的理解图像处理的核心内容,因此我感觉对图像处理的理解才是关键。

    基本的反色操作,主要是了解OpenCV对图像数据的操作方式:指针

    如下:

    unsigned char * ptr;//定义指针
    for(int i = 0 ;i < img->height;i++){
    ptr= (unsigned char*)img->imageData+ i*img->widthStep;//根据偏移获取数据
    for(int j = 0 ; j< img->width; j++){
    *(ptr+3*j) -= 20;
    *(ptr + 3* j+1) -= 20;
    *(ptr + 3*j +2) -= 20;
    }
    }

    同时注意对图像真彩和灰度的判定:

    image->nChannels == 3 真彩

    image->nChannels == 1 灰度

    #include<cv.h>
    #include<highgui.h>
    
    int main(){
    	IplImage * image;
    	image = cvLoadImage("E:\\image\\breast.tif",1);
    	cvNamedWindow("image",CV_WINDOW_AUTOSIZE);
    	cvSaveImage("E:\\image\\breast.jpg",image,0);
    	cvShowImage("image",image);
    	cvWaitKey(0);
    	unsigned char * ptr;
    	if(image->nChannels == 3){
    	for(int i = 0 ; i < image->height;i++){
    		ptr = (unsigned char *)image->imageData + i*image->widthStep; 
    		for(int j = 0; j< image->width;j++){
    			*(ptr + 3*j) = 255 - (*(ptr +3*j)); 
    			*(ptr + 3*j +1) = 255 - (*(ptr +3*j+1));
    			*(ptr + 3*j+2) = 255 - (*(ptr +3*j+2));
    		}
    	}
    	}
    
    	else if(image->nChannels == 1){
    		for(int i = 0 ; i < image->height;i++){
    			ptr = (unsigned char *)image->imageData + i*image->widthStep; 
    			for(int j = 0; j< image->width;j++){
    				*(ptr + j) = 255 - (*(ptr +j)); 
    			}
    		}
    
    	}
    	cvShowImage("image",image);
    	cvWaitKey(0);
    	cvSaveImage("E:\\image\\breast2.jpg",image,0);
    	return 0;
    }




  • 相关阅读:
    delphi多线程加锁
    delphi中pchar、char、string的定义与区别
    delphi指针
    关于delphi函数的调用顺序问题
    easyexcel
    # springcloud-eureka-feign-mybatis-seata ### 整合步奏
    zuul网关
    ## feign远程调用开启熔断
    eureka2
    Eureka
  • 原文地址:https://www.cnblogs.com/libing64/p/2878741.html
Copyright © 2011-2022 走看看