首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >试图使用OpenCV中的像素值显示图像。只有三分之一的图像显示

试图使用OpenCV中的像素值显示图像。只有三分之一的图像显示
EN

Stack Overflow用户
提问于 2021-06-02 21:37:40
回答 2查看 216关注 0票数 0

我试图读取图像中的像素,并通过遍历像素将其转换为另一种格式。

在转换之后,我似乎只得到了图像的1/3,我确信这是因为我使用.at()函数访问像素的方式。

我在下面的图片中看到:

代码语言:javascript
运行
AI代码解释
复制
Mat image = imread("cameraman.jpg");

然后,我遍历图像、行和列:

代码语言:javascript
运行
AI代码解释
复制
for (int i = 0; i < image.rows; i++)
{
   for (int j = 0; j < image.cols; j++)
   {
      placeGrayValue((double)image.at<uchar>(i, j));
   }
}

注意:placedGrayValue()只是这里的占位符,所以我只能共享相关的代码。

生成的图像仅占图像的前三分之一:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-04 01:50:34

您正在使用cv::imread加载映像,默认值(cv::IMREAD_COLOR)将作为CV_8UC3 (又名cv::Mat3b)类型的3通道映像加载它。

如果原始图像是灰度图像,当加载为3通道图像时,每个通道的强度值相同。

因此,当您扫描图像时,您应该使用.at<cv::Vec3b>(...)访问像素。如果您只想将第一个通道复制到placeGrayValue矩阵,您应该这样做:

代码语言:javascript
运行
AI代码解释
复制
placeGrayValue((double)image.at<cv::Vec3b>(i, j)[0]);
                                ^^^^^^^^^       ^^^
                                3 channel       first channel

如果您的输入不是灰度图像,那么您不应该只复制第一个通道,因为灰度值是三个R、G、B通道的线性组合。因此,最好先转换为灰度,然后复制:

代码语言:javascript
运行
AI代码解释
复制
cv::Mat grayscale;
cv::cvtColor(image, grayscale, cv::COLOR_BGR2GRAY);
...
    placeGrayValue((double)grayscale.at<uchar>(i, j));
                                        ^^^^^
                                       1 channel

或者您可以将图像加载为灰度图像:

代码语言:javascript
运行
AI代码解释
复制
Mat grayscale = imread("cameraman.jpg", cv::IMREAD_GRAYSCALE);

最后,您希望有一个灰度值为placeGrayValuedouble。您不应该扫描图像的这种简单的操作。你可以只是:

代码语言:javascript
运行
AI代码解释
复制
cv::Mat placeGrayValue;
grayscale.convertTo(placeGrayValue, CV_64F);
                                    ^^^^^^ 
                                   to double type

总结:

代码语言:javascript
运行
AI代码解释
复制
cv::Mat grayscale = cv::imread("cameraman.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat placeGrayValue;
grayscale.convertTo(placeGrayValue, CV_64F);
票数 2
EN

Stack Overflow用户

发布于 2021-06-03 05:57:34

我会贴出最后作为答案的文章,尽管这对我来说没有什么意义,我仍然很想知道为什么。

该图像有3个通道。当使用for循环迭代图像并使用(double)image.at<uchar>(i, j)提取像素数据时,它会遍历每个通道,就好像它们是单个像素一样。

解决方案(至少这个灰度图像)是迭代并乘以3。换句话说,(double)image.at<uchar>(i*3, j)最终给了我完整的图像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67815919

复制
相关文章
opencv显示图像
如果说我们在些项目的过程中会频繁的查看我们的图片,我们就可以直接给它封装一个方法:
淼学派对
2023/10/14
2370
opencv显示图像
OpenCV中图像的读取,显示与保存
相关函数:cv2.imread()、cv2.imshow()、cv2.imwrite()
py3study
2020/01/19
3K0
【OpenCV】图像的读入与显示
相关工程文件下载: 链接:https://pan.baidu.com/s/1jfDQTdOQqIf34-D5Nx6big 密码:0d13
EdenChen
2018/04/17
1.6K0
【OpenCV】图像的读入与显示
OpenCV之图像像素值统计
python代码: import cv2 as cv import numpy as np src = cv.imread("./test.png", cv.IMREAD_GRAYSCALE) cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src) min, max, minLoc, maxLoc = cv.minMaxLoc(src) print("min: %.2f, max: %.2f"% (min, max)) pr
MachineLP
2021/07/19
6520
OpenCV之图像像素值统计
opencv videocapture参数_opencv显示图像
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
1.4K0
【图像篇】OpenCV图像处理(二)---图像读取与显示
在上一篇文章中,我们简要介绍了图像的基础知识,包括图像彩色通道,像素,分辨率等知识,学会这些东西,我们才能更好的理解图像处理的各种操作,今天,我们将会用上一篇文章(【图像篇】opencv图像处理(一)---图像基础知识)提到的工具--OpenCV,并用python语言调用OpenCV接口来进行实际的代码操作,一起来看看吧!
用户5410712
2022/06/01
1.2K0
【图像篇】OpenCV图像处理(二)---图像读取与显示
Python+OpenCV的图像读取、显示、保存
一、图像的读取 图像的读取主要函数是cv2.imread()。 函数格式:Mat cv::imread (const String & filename, int flags = IMREAD_COLOR) 功能:读取图片文件。 参数: windows位图:后缀名为bmp JPEG文件:后缀名为jpeg/jpg JPEG2000:后缀名为jp2 便携式网络图像文件:后缀名为png TIFF文件:后缀名为tiff/tif 参数二是整型的flag,标志,默认值为IMREAD_COLOR,取值有如下几种: IMREAD_UNCHANGED:如果设置,则按原样返回加载的图像(带有Alpha通道,否则会被裁剪)。 IMREAD_GRAYSCALE:如果设置,总是将图像转换为单通道灰度图像读入。 IMREAD_COLOR:如果设置,总是将图像转换为3通道BGR彩色图像读入。 IMREAD_ANYDEPTH:如果设置,当输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 IMREAD_ANYCOLOR:如果设置,图像将以任何可能的颜色格式读取。 IMREAD_LOAD_GDAL:如果设置,总是使用GDAL驱动程序加载图像。 IMREAD_REDUCED_GRAYSCALE_2:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/2。 IMREAD_REDUCED_COLOR_2:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。 IMREAD_REDUCED_GRAYSCALE_4:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/4。 IMREAD_REDUCED_COLOR_4:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/4。 IMREAD_REDUCED_GRAYSCALE_8:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/8。 IMREAD_REDUCED_COLOR_8:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/8 常用的是前三种。因为flags是整型,所以传入数值也行: flags >0:等同于IMREAD_COLOR。 flags =0:等同于 IMREAD_GRAYSCALE。 flags <0: 等同于IMREAD_UNCHANGED。 通常是给1、0、-1,给其他整型也是可以的。 返回值:Mat类型。从opencv2开始,用于存放图像的数据类型就是Mat, 二、图像的显示 图像读取后,下一步就是再把图像显示出来,主要函数有:cv2.namedWindows()、cv2.imshow()。再另外再介绍三个函数cv2.waitKey()、cv2.destroyWindow()、cv2.destroyAllWindows()。 2.1 cv2.namedWindows函数介绍 void cv::namedWindow (const String & winname,int flags = WINDOW_AUTOSIZE ) 功能:创建一个窗口。 参数:参数一是winname,给创建的窗口起一个名字,以后通过这个名字调用该窗口;参数二整型的flags,定义窗口的属性,默认值是WINDOW_AUTOSIZE,其他取值如下所示: WINDOW_NORMAL:用户可以调整窗口大小(不受约束)/也可以使用将全屏窗口切换为正常大小。 WINDOW_AUTOSIZE:用户无法调整窗口大小,窗口大小随显示图像的大小而变化。 WINDOW_OPENGL:带有opengl支持的窗口。 WINDOW_FULLSCREEN:将窗口更改为全屏。 WINDOW_FREERATIO:不遵循图像的比例调整图像后在窗口显示 WINDOW_KEEPRATIO:根据图像的比例调整图像后在窗口中显示 2.2 cv2.imshow函数介绍 void cv::imshow (const String & winname, InputArray mat ) 功能:在指定窗口显示图像。 参数:参数一是窗口名;参数二设置为要显示的图像。 注意此函数之后应该跟随函数waitKey,指定窗口显示多少毫秒。 2.3 cv2.waitKey函数介绍 int cv::waitKey (int delay = 0) 功能:等待按键或延迟多少毫秒。 参数:整型的delay,默认值是0。设置为0表示永久等待按键,设置为非零,表示延迟delay毫秒。该函数仅在创建至少一个窗口并且窗口处于活动状态时才起作用。 2.4 cv2.destroyWind
菲宇
2019/11/12
3.7K0
OpenCV中图像显示你不知道的编程技巧
OpenCV 中最常用的一个API函数 imshow 各种编程与应用技巧,是否有你以前一直想的,但是从来没有成功过的操作!
磐创AI
2019/10/09
1.5K0
OpenCV中图像显示你不知道的编程技巧
c#利用Halcon的图像显示控件显示图像
?
vv彭
2020/10/27
2.9K0
c#利用Halcon的图像显示控件显示图像
OpenCV中图像显示你不知道的编程技巧
OpenCV 中最常用的一个API函数 imshow 各种编程与应用技巧,是否有你以前一直想的,但是从来没有成功过的操作!
OpenCV学堂
2019/09/20
1.9K0
OpenCV中图像显示你不知道的编程技巧
【python-opencv】读取、显示、写入图像
cv.waitKey()是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果0被传递,它将无限期地等待一次敲击键。它也可以设置为检测特定的按键,例如,如果按下键 a 等,我们将在下面讨论。
西西嘛呦
2020/08/26
1.5K0
OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
1. 学习目标 图像理解 图像读取与显示 2. 灰度图像 —— 单通道 1. 人眼中的灰度图像 2. 计算机中的灰度图像 [[ 72 72 71 ... 151 154 156] [ 75 73 69 ... 152 155 158] [ 78 73 66 ... 152 157 160] ... [ 94 94 94 ... 208 197 187] [ 92 92 93 ... 208 200 191] [ 96 96 97 ... 208 202 195]] 3
Rattenking
2022/09/30
1.3K0
OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
要求步骤: 1.读入彩色图像,并显示; 2.将彩色图像灰度化,并显示; 3将灰度图像,用Canny边缘算子得到图像边缘,并显示。
川川菜鸟
2021/10/18
1.3K0
OpenCV之图像像素读写
python代码: import cv2 as cv src = cv.imread("./test.png") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src) h, w, ch = src.shape print("h , w, ch", h, w, ch) for row in range(h): for col in range(w): b, g, r = src[row, col]
MachineLP
2021/07/19
2370
OpenCV之图像像素读写
OpenCV图像处理(二十--大结局)---OpencCV VS Matplotlib显示图像
机械能是动能与势能的总和,这里的势能分为重力势能和弹性势能。我们把动能、重力势能和弹性势能统称为机械能。决定动能的是质量与速度;决定重力势能的是质量和高度;决定弹性势能的是劲度系数与形变量。机械能只是动能与势能的和。机械能是表示物体运动状态与高度的物理量。物体的动能和势能之间是可以转化的。在只有动能和势能相互转化的过程中,机械能的总量保持不变,即机械能是守恒的。
用户5410712
2022/06/01
7420
OpenCV图像处理(二十--大结局)---OpencCV VS Matplotlib显示图像
OpenCV3 图像的加载、修改、显示与保存
OpenCV 图像加载、修改、显示与保存 图像加载 cv::imread imread功能是加载图像文件成为一个Mat对象, 第一个参数表示图像文件名称 第二个参数,表示加载的图像是什么类型,支持常见的三个参数值 IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变 IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来 IMREAD_COLOR (>0) 表示把原图作为RGB图像(实际顺序为BGR)加载进来。 注意:OpenCV支持JPG、PNG、TIFF等常见格式图像
AI异构
2020/07/29
1.5K0
OpenCV 入门教程:图像读取和显示
在计算机视觉和图像处理领域,读取和显示图像是最基础且常见的操作之一。 OpenCV 作为一个强大的计算机视觉库,提供了丰富的功能来处理图像数据。本文将以读取和显示图像文件为中心,介绍使用 OpenCV 进行图像读取和显示的基本步骤和实例。
小蓝枣
2023/07/10
1K0
OpenCV 入门教程:图像读取和显示
MATLAB的图像显示方法
在 MATLAB 中, 序列是用矩阵向量表示, 但它没有包含采样信息, 即序列位置信息, 为 此, 要表示一个序列需要建立两个向量; 一是时间序列 n , 或称位置序列, 另一个为取值序 列 x ,表示如下:
timerring
2023/03/04
4.8K0
MATLAB的图像显示方法
基于FPGA的图像显示
这几天一直在调试FPGA的图像显示系统,今天终于成功,图像不在闪烁,也不再边框缺失。
FPGA开源工作室
2019/10/29
1.8K0
基于FPGA的图像显示
点击加载更多

相似问题

用改变的像素值openCV显示图像

13

数着不。使用OpenCV显示图像中的黑白像素

20

如何将像素值转换为opencv中的显示图像

12

Python:图像显示中的像素值?

10

如何使用抖动显示只有黑白像素的灰色图像?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文