cv2.imshow显示二进制图像

时间:2019-07-19 07:17:43

标签: python opencv opencv3.0

我有一个代码,其中矩阵hip_dir表示RGB图像。如果我检查它的形状,python返回(1080,1920,3)。如果我写

[ec2-user@ip-x.x.x.x~]$ systemctl status wildfly.service -l
● wildfly.service - LSB: WildFly Application Server
   Loaded: loaded (/etc/rc.d/init.d/wildfly; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2019-07-19 06:54:36 UTC; 41s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 16733 ExecStop=/etc/rc.d/init.d/wildfly stop (code=exited, status=0/SUCCESS)
  Process: 26846 ExecStart=/etc/rc.d/init.d/wildfly start (code=exited, status=3)
   CGroup: /system.slice/wildfly.service
           ├─16927 /bin/sh /opt/wildfly/bin/standalone.sh -c standalone.xml
           └─16980 java -D[Standalone] -server -Xms1024M -Xmx4096M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/opt/wildfly/standalone/log/server.log -Dlogging.configuration=file:/opt/wildfly/standalone/configuration/logging.properties -jar /opt/wildfly/jboss-modules.jar -mp /opt/wildfly/modules org.jboss.as.standalone -Djboss.home.dir=/opt/wildfly -Djboss.server.base.dir=/opt/wildfly/standalone -c standalone.xml

Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: ├─16980 java -D[Standalone] -server -Xms1024M -Xmx4096M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/opt/wildfly/standalone/log/server.log -Dlogging.configuration=file:/opt/wildfly/standalone/configuration/logging.properties -jar /opt/wildfly/jboss-modules.jar -mp /opt/wildfly/modules org.jboss.as.standalone -Djboss.home.dir=/opt/wildfly -Djboss.server.base.dir=/opt/wildfly/standalone -c standalone.xml
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: ├─26846 /bin/sh /etc/rc.d/init.d/wildfly start
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: ├─26859 /bin/sh /etc/rc.d/init.d/wildfly status
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: └─26870 systemctl status wildfly.service
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: Jul 19 06:54:36 ip-x.x.x.x.ec2.internal systemd[1]: Starting LSB: WildFly Application Server...
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: Jul 19 06:54:36 ip-x.x.x.x.ec2.internal wildfly[26846]: Starting wildfly:
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal systemd[1]: wildfly.service: control process exited, code=exited status=3
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal systemd[1]: Failed to start LSB: WildFly Application Server.
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal systemd[1]: Unit wildfly.service entered failed state.
Jul 19 06:54:36 ip-x.x.x.x.ec2.internal systemd[1]: wildfly.service failed.

我得到了保存在文件夹中的正确图像。但是,当我这样做

cv2.imwrite('hip_dir.jpg',hip_dir)

我得到相同的黑白图像(但是有一些蓝色像素,这使它变得更加陌生)。

如何正确使用imshow?

编辑:

使用命令cv2.cvtColor会导致以下错误:

cv2.imshow('img0',hip_dir)
cv2.waitKey(0)
cv2.destroyAllWindows()

Edit2:我发现发生此错误的原因很简单,因为矩阵位于np.float64中。但是,将其转换为np.float32并不会更改imshow结果。

2 个答案:

答案 0 :(得分:1)

OpenCV要求图像为BGR格式,请尝试应用

converted = cv2.cvtColor(hip_dir,cv2.COLOR_BGR2RGB)

答案 1 :(得分:0)

所以,我发现了问题所在:在imshow命令中显示RGB颜色的正确方法是将图像的对应矩阵强制为np.uint8格式。我测试了其他格式,但没有一种能正常工作。我也不知道为什么。