imshow
के लिए प्रलेखन के अनुसार, यह स्क्रीन पर प्रदर्शित करने के लिए स्वचालित रूप से 16-बिट ग्रेस्केल को 8-बिट तक स्केल करेगा। मैंने निम्न प्रोग्राम के साथ इसका परीक्षण किया:
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
int main(int argc, char *argv[]) {
cv::Mat image;
image = cv::imread("pic2.jpg");
if (!image.data) {
std::cout << "Image file not found\n";
return 1;
}
cv::cvtColor(image, image, CV_BGR2GRAY);
cv::Mat pic16bit;
image.convertTo(pic16bit, CV_16U, 255); //convert to 16-bit by multiplying all values by 255
// create image window named "asdfasdf"
cv::namedWindow("asdfasdf");
// show the image on window
cv::imshow("asdfasdf", pic16bit);
// wait for key
cv::waitKey(0);
return 0;
}
यह ग्रेस्केल छवि को अपेक्षित रूप से प्रदर्शित करता है। तो अगर आपको बस एक खाली खिड़की मिल रही है, तो मेरा अनुमान है कि अन्य लाइब्रेरी से सीवी :: मैट में आपका रूपांतरण सही ढंग से काम नहीं कर रहा है। उदाहरण के लिए, जब मैंने पहली बार 8-बिट से 16-बिट में कनवर्ट करने की कोशिश की तो मुझे एक सभी काले छवि मिली क्योंकि मैं सभी 8-बिट मानों को 255 तक गुणा करना भूल गया था।
डीबगिंग में पहला कदम होगा अपने 16-बिट ग्रेस्केल सीवी :: मैट में कुछ या सभी मान प्रदर्शित करने का प्रयास करें।
साथ ही, सामान्य नियम के रूप में स्टैक ओवरफ़्लो सबसे अच्छा काम करता है यदि आपके प्रश्न में केवल एक प्रश्न है। जब कई प्रश्न हैं तो आप एक से अधिक वैध उत्तर के साथ हवादार हो जाएंगे, लेकिन आप उनमें से केवल एक को स्वीकार कर सकते हैं।
सुनिश्चित करें कि आप 'imshow' के बाद' waitKey 'पर कॉल करें। 'WaitKey' को छोड़ने के लिए कुछ भी नहीं होने का एक कारण होगा। – SSteve
मैंने प्रतीक्षाकी का उपयोग किया, और खिड़की वहां खाली थी लेकिन खाली थी। – LeOpArD
आपको शायद यह नहीं कहा जाना चाहिए "स्क्रीन पर कुछ भी नहीं दिखाई दिया"। यह "स्क्रीन पर एक खाली खिड़की दिखाई देने" से अलग है। आपके प्रश्नों में बेहतर विवरण, आपको एक उपयोगी उत्तर प्राप्त करने का बेहतर मौका मिलेगा। – SSteve