2015-11-13 1 views
2

Je capture une trame de données à partir d'un imageur avec une résolution de 102 x 77. Je veux sous-échantillonner à 80 x 60. La qualité n'est pas la principale préoccupation mais la facilité de mise en œuvre et la vitesse sont.C++ Comment optimiser l'échelle de l'image en supprimant les pixels

Je crois que je peux accomplir cela en laissant tomber à peu près tous les 4 pixels:

>>> 80.0/102.0 
0.7843137254901961 
>>> 
>>> 60.0/77.0 
0.7792207792207793 
>>> 
>>> 102 * (0.75) 
76.5 
>>> 77 * (0.75) 
57.75 

Comme il est pas exactement 4, comment puis-je compte pour cela? Quel est le meilleur moyen de réduire le nombre de pixels dont j'ai besoin pour obtenir 80 x 60? Merci.

code où j'itérer pixels:

// Initialize data store for frame pixel data 
vector<quint8> data; 
data.resize(frame.getHeight() * frame.getWidth()); 

// Try to get a frame 
forever 
{ 

    // Request a frame and check return status 
    if (!getRawFrame(frame)) { 

     qDebug() << "************************"; 
     qDebug() << "Failed Capture Attempt!"; 
     qDebug() << "************************"; 

     // Failed - try again 
     continue; 

    } 

    // Get the height and width 
    int h = frame.getHeight(); 
    int w = frame.getWidth(); 

    // Get the frame raw data 
    vector<quint8> rawdata = frame.getRawData(); 

    // Iterate the pixels 
    for (int y = 0; y < h; y++) 
    { 
     for (int x = 0; x < w; x++) 
     { 

      // Extract 
      quint8 pixelValue = reinterpret_cast<quint8*>(rawdata.data())[y*w+x]; 
      int convertToInt = int(pixelValue); 

      /// do stuff on pixel data 

      // Downconvert 
      pixelValue = convertToInt; 

      // Assign 
      data[y*w+x] = pixelValue; 

     } 
    } 

    // Assign the data to the Frame now 
    frame.setData(data); 

    // Done with capture loop 
    break; 

} 

Répondre

3

Avoir une résolution plus petite que ce que vous avez besoin après la chute des pixels est évidemment pas ce que vous voulez. Et puisque vous ne pouvez pas récupérer certains pixels par magie, je ne vais pas essayer d'en perdre autant en premier lieu.

Mon approche dans ce cas serait d'abandonner tous les cinq pixels. Cela vous laisserait avec une résolution de 81x61. Maintenant, vous pouvez simplement enlever 1 ligne de plus et une colonne de plus de pixels et vous avez terminé. C'est le plus rapide et le plus facile que je puisse penser.