OpenCV计算机视觉编程记录(02)---------像素坐标和像素值

实现功能:
1、以灰度图形式读入一幅彩色图像并在窗口中显示出来;

2、为该窗口添加鼠标左键点击响应,实现点击时在命令控制台输出点击位置像素坐标和像素值(每次点击输出一行信息);

3、在图像中绘制一个圆或椭圆或矩形,框住某个对象(不能随意框个位置),并在旁边输出与该对象相关的文本,用另一个窗口显示出来。

选作(可直接替换掉上述任务中的1和2):读入并显示一副彩色图象,实现鼠标左键点击彩色图象,输出对应像素的颜色值。

2
源码:

#include<opencv2\highgui.hpp>
#include<opencv2\core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void onMouse(int event, int x, int y, int flags, void* param);
void main(){
	Mat im=imread("test1.bmp",IMREAD_GRAYSCALE);
	imshow("test1.bmp",im);

	setMouseCallback(
	 "test1.bmp",  // 捕获鼠标事件的窗口
	 onMouse,   // 鼠标回调函数名
	 reinterpret_cast<void*>(&im) // 传图像对象指针
   );
	waitKey(0);
}
void onMouse(int event, int x, int y, int flags, void* param) {
	Mat *im = reinterpret_cast<Mat*>(param);
	switch (event) { // 什么鼠标事件?
	case EVENT_LBUTTONDOWN:	// 鼠标左键按下事件
	      // 输出(x, y)处像素值	      
             cout << "坐标 (" << x << "," << y 
             << ") 处像素值为: "
	      << static_cast<int>(im->at <uchar>(Point(x, y))) 
             << endl;
	      break;
	}
}



程序结果:
在这里插入图片描述
2:
源码:

#include<opencv2\highgui.hpp>
#include<opencv2\core.hpp>
#include<opencv2\imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void onMouse(int event, int x, int y, int flags, void* param);
void main(){
	Mat im=imread("test1.bmp",IMREAD_GRAYSCALE);

	imshow("test1.bmp",im);

	circle(
	im, 			// 目标图像
	Point(111, 224), 	//中心点坐标
	65, 				//半径
	0,	//颜色(这里用黑色,针对灰度图像)
	3	// 线的粗细
   );

	putText(	
      im, 			  // 目标图像
	"I am a bradge",		  // 文本(中文兼容不好)
	Point(30, 300),	  	  // 文本位置
	FONT_HERSHEY_PLAIN, // 字体类型(字体很有限)
	2.0,				  // 字体大小
    	255,// 字体颜色(这里用白色,对于彩色图像则是蓝色)
	2				  // 文本粗细
);
	imshow("test1.bmp",im);
	waitKey(0);
}

最终结果:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要获取像素点坐标,可以使用OpenCV中的Mat对象和at()方法来实现。具体操作步骤如下: 1. 加载图像到Mat对象中。 2. 使用at()方法获取像素点的值和坐标。 例如,下面的代码可以获取图像中所有像素点坐标和值: ``` Mat image = imread("test.jpg", IMREAD_GRAYSCALE); // 加载灰度图像 for (int i = 0; i < image.rows; i++) { for (int j = 0; j < image.cols; j++) { int pixel_value = image.at<uchar>(i, j); // 获取像素点值 cout << "Pixel at (" << i << ", " << j << "): " << pixel_value << endl; } } ``` 这里使用了at<uchar>(i,j)方法来获取灰度图像像素点的值,同时输出像素点坐标。如果是使用彩色图像,则需要使用at<Vec3b>(i,j)方法来获取每个像素点的RGB值。 ### 回答2: 在OpenCV中,可以使用`cv2.imread()`函数读取图像,并使用`img.shape`属性获取图像的宽度和高度。然后,可以通过循环遍历像素点,使用`img.item()`函数获取像素点的颜色值。每个像素点坐标由横坐标和纵坐标表示。 以下是获取像素点坐标的示例代码: ```python import cv2 # 读取图像 image = cv2.imread('image.jpg') # 获取图像的宽度和高度 height, width, _ = image.shape # 遍历像素点 for y in range(height): for x in range(width): # 获取像素点的颜色值 pixel = image[y, x] print(f"坐标({x}, {y})的颜色值为{pixel}") ``` 上述代码中,通过嵌套的`for`循环遍历了图像的所有像素点,使用`image[y, x]`获取每个像素点的颜色值,并输出坐标以及颜色值。 需要注意的是,OpenCV中的像素点坐标表示通常是`(x, y)`,而不是常见的`(y, x)`,因此在代码中索引像素点时应注意顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值