png的图片四通道,jpg为三通道

import cv2

img=cv2.imread("sample.jpg",cv2.IMREAD_UNCHANGED)

cv2.imshow("jpg",img)
#cv2.waitKey(0)
print(img.shape)


img2=cv2.imread("sample.png",cv2.IMREAD_UNCHANGED)

cv2.imshow("png",img2)
#cv2.waitKey(0)
print(img2.shape)

输出:
(853, 1280, 3)
(853, 1280, 4)

cv2.imread()用于读取图片文件

imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:

cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。

cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。

cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1

cv2.imread()读取图片后已多维数组的形式保存图片信息,前两维表示图片的像素坐标,最后一维表示图片的通道索引,具体图像的通道数由图片的格式来决定

img2=cv2.imread("sample.png",cv2.IMREAD_UNCHANGED) 如果改成img2=cv2.imread("sample.png") 输出 3,因为默认读入彩色图片。

png图片:

png图片比jpg多了一个Alpha通道, 一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,png图片采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。

所以,送检的图片要转化成IMREAD_COLOR的三通道格式。

把jpg图片imread 一下在imwrite成 .png形式,发现 生成的png图片是三通道,四通道能转化成三通道,反之不可逆。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用OpenCV库实现该功能的C++代码示例: ```c++ #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat img_jpg = imread("your_jpg_image.jpg"); Mat img_png = imread("your_png_image.png", IMREAD_UNCHANGED); if (img_jpg.empty() || img_png.empty()) { cout << "Failed to load image files!" << endl; return -1; } Mat img_png_bgra; if (img_png.channels() == 4) { cvtColor(img_png, img_png_bgra, COLOR_BGRA2BGR); } else { img_png_bgra = img_png; } Mat img_result; addWeighted(img_jpg, 1.0, img_png_bgra, 0.5, 0.0, img_result); imwrite("result.jpg", img_result); return 0; } ``` 代码解释: 1. 首先,我们使用 `imread()` 函数从磁盘加载 `jpg` 和 `png` 图片,分别存储在 `img_jpg` 和 `img_png` Mat 对象中。 2. 接下来,我们检查这两个图像是否加载成功,如果有任何一个加载失败,则输出错误信息并退出程序。 3. 由于 `png` 图像可能具有通道(BGR + Alpha),而 `jpg` 图像只有三个通道(BGR),因此我们需要将 `png` 图像转换为具有三个通道(BGR)的图像。如果 `png` 图像已经是三通的,则不需要进行转换。转换后的图像存储在 `img_png_bgra` Mat 对象中。 4. 最后,我们使用 `addWeighted()` 函数将 `jpg` 图像和 `png` 图像叠加,并将结果存储在 `img_result` Mat 对象中。`addWeighted()` 函数的第二个参数是 `jpg` 图像的权重,第个参数是 `png` 图像的权重,第五个参数是亮度调整参数,这里我们将其设置为0。最终结果将存储在磁盘上的 `result.jpg` 文件中。 希望这个代码能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值