Opencv简单图像操作

Opencv

一、读取图片

1.imshow

c++ 复制代码
Mat imread(const string& filename, intflags=1 );

flags:
enum
{
/* 8bit, color or not */
   CV_LOAD_IMAGE_UNCHANGED  =-1,
/* 8bit, gray */
   CV_LOAD_IMAGE_GRAYSCALE  =0,
/* ?, color */
   CV_LOAD_IMAGE_COLOR      =1,
/* any depth, ? */
   CV_LOAD_IMAGE_ANYDEPTH   =2,
/* ?, any color */
   CV_LOAD_IMAGE_ANYCOLOR   =4
};

Mat image0=imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像
Mat image1=imread("dota.jpg",0);//载入灰度图
Mat image2=imread("dota.jpg",199);//载入3通道的彩色图像
Mat logo=imread("dota_logo.jpg");//载入3通道的彩色图像
  • CV_LOAD_IMAGE_UNCHANGED,这个标识在新版本中被废置了,忽略。
  • CV_LOAD_IMAGE_ANYDEPTH- 如果取这个标识的话,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
  • CV_LOAD_IMAGE_COLOR- 如果取这个标识的话,总是转换图像到彩色一体
  • CV_LOAD_IMAGE_GRAYSCALE- 如果取这个标识的话,始终将图像转换成灰度

  • flags >0返回一个3通道的彩色图像。
  • flags =0返回灰度图像。
  • flags <0返回包含Alpha通道的加载的图像。

2.namedWindow

c++ 复制代码
void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE ); 
  • WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
  • WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
  • WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

3.imshow

c++ 复制代码
void imshow(const string& winname, InputArray mat);
4.效果图

c++

python

二、图像操作

python

python 复制代码
import cv2 as cv
import numpy as np
image = cv.imread("/home/stoair/Opencv/Images/1.png", 4)
cv.namedWindow("initial",cv.WINDOW_NORMAL)
cv.namedWindow("after",cv.WINDOW_NORMAL)
height = image.shape[0]
width = image.shape[1]
cv.imshow("initial",image)
for i in range(height):
	for j in range(width):
		(b, g, r) = image[i, j]
		ave = b/3 + g/3 + r/3
		image[i, j] = (ave, ave, ave)

cv.imshow("after",image) 
cv.waitKey(0)

c++

c++ 复制代码
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat image0 = imread("/home/stoair/Opencv/Images/1.png", 4);
    namedWindow("initial", WINDOW_NORMAL);
    namedWindow("change", WINDOW_NORMAL);
    imshow("initial", image0);

    int height = image0.rows;
    int width = image0.cols;
    for(int i = 0; i < height; i++){
        for(int j = 0; j < width; j++){
            unsigned char b = image0.at<Vec3b>(i, j)[0];
            unsigned char g = image0.at<Vec3b>(i, j)[1];
            unsigned char r = image0.at<Vec3b>(i, j)[2];
            unsigned char ave = b/3 + g/3 +r/3;
            image0.at<Vec3b>(i, j)[0] = ave;
            image0.at<Vec3b>(i, j)[1] = ave;
            image0.at<Vec3b>(i, j)[2] = ave;
        }
    }

    imshow("change", image0);
    waitKey(0);
    return 0;
}
相关推荐
Elastic 中国社区官方博客8 分钟前
使用 A2A 协议和 MCP 在 Elasticsearch 中创建一个 LLM agent 新闻室:第二部分
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
知识浅谈10 分钟前
我用Gemini3pro 造了个手控全息太阳系
人工智能
孤廖12 分钟前
终极薅羊毛指南:CLI工具免费调用MiniMax-M2/GLM-4.6/Kimi-K2-Thinking全流程
人工智能·经验分享·chatgpt·ai作画·云计算·无人机·文心一言
aneasystone本尊13 分钟前
学习 LiteLLM 的日志系统
人工智能
秋邱17 分钟前
价值升维!公益赋能 + 绿色技术 + 终身学习,构建可持续教育 AI 生态
网络·数据库·人工智能·redis·python·学习·docker
Mintopia20 分钟前
🎭 小众语言 AIGC:当 Web 端的低资源语言遇上“穷得只剩文化”的生成挑战
人工智能·aigc·全栈
安达发公司22 分钟前
安达发|告别手工排产!车间排产软件成为中央厨房的“最强大脑”
大数据·人工智能·aps高级排程·aps排程软件·安达发aps·车间排产软件
公众号-架构师汤师爷22 分钟前
n8n工作流实战:从0到1打造公众号热点选题一键采集智能体(万字图文)
人工智能·agent·智能体·n8n
CoovallyAIHub35 分钟前
抛弃LLM!MIT用纯视觉方法破解ARC难题,性能接近人类水平
深度学习·算法·计算机视觉
Baihai_IDP44 分钟前
剖析大模型产生幻觉的三大根源
人工智能·面试·llm